14. Pour faire durer le plaisir!
Extraire seulement les caractères de 5 à 7
Extraire les caractères à partir de 5
Savoir si une condition est vraie ou fausse?
Est-ce que le contenu des valeurs correspond à “2019-01-01”
Connaître la longueur des valeurs d’une colonne
Compter le nombre de mots dans des cellules (séparés par des espaces)
- value.split(" ").length() ou value.split(//).length()
Calcul d’un pourcentage arrondi (ex d’un résultat sur 10)
Transformer un format date en format texte plus lisible
- value.toString(“dd MMMM yyyy”)
La création et manipulation de listes (array) - Diviser le contenu de cellules
Diviser le contenu de cellules en fonction d’un séparateur pour ne conserver que le premier élément
Diviser le contenu d’une cellule pour le réordonner
value.split(“,”).reverse().join(“,”)
value.split(“,”).sort().join(“,”)
Diviser après les 3 premiers caractères et conserver le premier élément
- value.splitByLengths(3)[0]
Diviser selon le type de caractères et retenir le deuxième élément
- value.splitByCharType()[1]
Diviser le contenu d’une cellule sur un terme x et conserver le contenu précédent
Inverser le contenu d’une cellule
Diviser le contenu d’une cellule et inverser l’ordre de présentation en ajoutant une virgule entre les deux
- value.split(’ ‘)[1] + “,” + " " + value.split(’ ’)[0]
OU
- value.match(/(.),(.)/).reverse().join(" ")
Ajouter un zéro pour avoir un nombre de caractères précis
Ajouter un zéro devant le contenu si donne une chaine de 0 à 2 caractères
- “0”[0,2-length(value)] + value
Appliquer des conditions
Fonction if - même chose que dans excel
- if(test, si test est vrai, si test est vrai)
Si la cellule contient x, écrire x, sinon y
if(value.contains(“x”), “x”, “y”)
if(value.contains(“1”), value, null)
Comparer deux colonnes
Identifier si le contenu des cellules d’une colonne est pareil à une autre
- value == cells[‘autre-colonne’].value
Est-ce que le premier caractère de la colonne x est le même que la colonne y
- cells[“colonne1”].value[0] == cells[“colonne2”].value[0]
Comparer le contenu de deux colonnes et modifier les valeurs selon le résultat de la condition
- if(cells[“colonne1”].value == cells[“colonne2”].value, “Pareil”, “Pas pareil”)
Faire des calculs simples (valeurs numériques)
Somme d’une colonne plus une autre
- value + cells[‘Jour du mois’].value
Arrondir le contenu
Reprendre et concaténer le contenu d’une autre colonne
Créer une nouvelle colonne en fusionnant le contenu de deux autres et ajouter du texte
- cells[‘nom’].value + cells[‘nom’].value + “Bonjour!”
Créer une nouvelle colonne avec les trois premiers caractères seulement
cells[‘Symptome’].value[0,3]
Transformer le contenu d’une colonne en concaténant le contenu d’une autre
value + ’ ’ + cells[‘street-type’].value
Remplacer des caractères
Remplacer tout le contenu d’une colonne (ici, vider la colonne)
Remplacer une lettre par une autre
- value.replaceChars(“o”, “a”)
Faire plusieurs remplacements d’un coup
- value.replace(“1”, “un”).replace(“2”, “deux”).replace(“3”, “trois”)
Identifier des cellules qui commencent par… (résultat booléen)
- value.startsWith(“Berri”)
Supprimer un caractère de début ou fin de valeur:
Supprime “S” du début de la cellule
- value.replace(/^S/,"") [regex ^ indique le début d’une cellule]
Supprime “.” à la fin de la cellule
- value.replace(/.$/,"") [regex $ indique la fin d’une cellule]
Extraire seulement une partie d’une date
value.toDate().datePart(“year”)
diff(now(),value,‘weeks’)
LS0tDQp0aXRsZTogIk9wZW5SZWZpbmUiDQphdXRob3I6ICJDYXJvbGluZSBQYXRlbmF1ZGU8L2JyPkJpYmxpb3Row6hxdWUgZGVzIGxldHRyZXMgZXQgc2NpZW5jZXMgaHVtYWluZXMsIFVuaXZlcnNpdMOpIGRlIE1vbnRyw6lhbDwvYnI+Y2Fyb2xpbmUucGF0ZW5hdWRlQHVtb250cmVhbC5jYSINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cm9ib2Jvb2s6DQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICBoaWdobGlnaHQ6IGthdGUNCiAgICB0aHVtYm5haWxzOiBmYWxzZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMg0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBtYXRoamF4OiBudWxsDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHJtZGZvcm1hdHMpDQoNCiMjIEdsb2JhbCBvcHRpb25zDQpvcHRpb25zKG1heC5wcmludD0iNzUiKQ0Kb3B0c19jaHVuayRzZXQoZWNobz1GQUxTRSwNCgkgICAgICAgICAgICAgY2FjaGU9VFJVRSwNCiAgICAgICAgICAgICAgIHByb21wdD1GQUxTRSwNCiAgICAgICAgICAgICAgIHRpZHk9VFJVRSwNCiAgICAgICAgICAgICAgIGNvbW1lbnQ9TkEsDQogICAgICAgICAgICAgICBtZXNzYWdlPUZBTFNFLA0KICAgICAgICAgICAgICAgd2FybmluZz1GQUxTRSkNCm9wdHNfa25pdCRzZXQod2lkdGg9NzUpDQpgYGANCg0KDQoNCiFbXShpbWFnZXMvT1ItbG9nby5qcGcpIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIE9iamVjdGlmcw0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvT1IxNi5qcGciIHdpZHRoPSIyNTBweCIgLz4NCjwvZGl2Pg0KDQotIENvbXByZW5kcmUgbGUgZm9uY3Rpb25uZW1lbnQgZHUgbG9naWNpZWwuDQotIEltcG9ydGVyIGV0IGV4cGxvcmVyIHVuIGpldSBkZSBkb25uw6llcy4gDQotIE1hbmlwdWxlciBldCB0cmFuc2Zvcm1lciBkZXMgZG9ubsOpZXMuDQotIFMnaW5pdGllciDDoCBsJ3VzYWdlIGR1IGxhbmdhZ2UgR1JFTCBldCBhdXggZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzLg0KPC9icj4NCjwvYnI+DQo8L2JyPg0KPC9icj4NCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIDEuIFByw6lsaW1pbmFpcmVzDQojIyBEZXMgZG9ubsOpZXMgYmllbiBvcmRvbm7DqWVzIGNvbW1lbmNlbnQgcGFyIHNvaS1tw6ptZSENCg0KDQotIExlIG5ldHRveWFnZSBkZSBmaWNoaWVycyBkZSBkb25uw6llcyBlc3QgdW5lIHTDomNoZSBzb3V2ZW50IGxvbmd1ZSBldCBlbm51eWV1c2UgbWFpcyBpbmNvbnRvdXJuYWJsZSBhdmFudCB0b3V0ZSBhbmFseXNlIG91IGRpZmZ1c2lvbiBkZSBkb25uw6llcy4NCg0KLSBMJ2FtcGxldXIgZGUgY2V0dGUgdMOiY2hlIGTDqXBlbmRyYSBkZSBsJ8OpdGF0IGRlcyBkb25uw6llcyBldCBkdSB0eXBlIGRlIGxvZ2ljaWVsIHF1aSBzZXJhIGVuc3VpdGUgdXRpbGlzw6kgw6AgZGVzIGZpbnMgZCdhbmFseXNlIG91IGRlIHZpc3VhbGlzYXRpb24gKFIsIFNQU1MsIFN0YXRhLCBUYWJsZWF1LCBBcmNHSVMuLi4pDQoNCjwvYnI+DQoNCiMjIyMgUHJvYmzDqG1lcyBjb3VyYW50cyByZWxhdGlmcyDDoCBsYSBmb3JtZSBldC9vdSBhdSBjb250ZW51IGQndW4gamV1IGRlIGRvbm7DqWVzOg0KDQotIFByb2Jsw6htZXMgZCdlbnTDqnRlcyBldCBkZSBub21zIGRlIHZhcmlhYmxlcy4NCi0gQ2VsbHVsZXMgZnVzaW9ubsOpZXMsIHF1aSBjb250aWVubmVudCBkaWZmw6lyZW50ZXMgaW5mb3JtYXRpb25zLg0KLSBWYXJpYWJsZXMgcXVpIG5lIHNvbnQgcGFzIGNsYWlyZW1lbnQgZMOpZmluaWVzIMOgIGxhIHZlcnRpY2FsZS4NCi0gQ29udGVudSB0ZXh0dWVsIG5vbiBzdHJ1Y3R1csOpLg0KLSBQcm9ibMOobWVzIGRlIGZvcm1hdHMsIGRlICJwZXRpdHMgY2FyYWN0w6hyZXMiIC0+IHPDqXBhcmF0ZXVycy9kw6lsaW1pdGV1cnMgZGUgY29udGVudSBldCBkZSBjb2xvbm5lcywgZ3VpbGxlbWV0cywgZW5jb2RhZ2UgKCcnICB8fCB8ICIiICwgLiA7ICkNCi0gUHLDqXNlbmNlIGRlIGNlbGx1bGVzIHZpZGVzLCBlc3BhY2VzLi4uDQoNCltBIGNhc2Ugc3R1ZHkgaW4gbWVzc3kgZGF0YSBhbmFseXNpczogdGhlIEF1c3RyYWxpYW4gc2FtZS1zZXggbWFycmlhZ2Ugc3VydmV5XShodHRwczovL2Jsb2cucmV2b2x1dGlvbmFuYWx5dGljcy5jb20vMjAxNy8xMi9zZXgtbWFycmlhZ2Utc3VydmV5Lmh0bWwpDQoNCjxjZW50ZXI+DQoNCiFbXShpbWFnZXMvT1I5LmpwZyl7d2lkdGg9NjAlfSAgDQoNCjwvY2VudGVyPg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KQXZhbnQgZCd1dGlsaXNlciBzZXMgZG9ubsOpZXMgZGFucyBsZSBsb2dpY2llbCBkZSBzb24gY2hvaXgsIGxlIG5ldHRveWFnZSBkZSBzZXMgZG9ubsOpZXMgcGV1dCBkb25jIGluY2x1cmUgZGUgbm9tYnJldXNlcyB0w6JjaGVzIGNvbW1lOg0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvYm90dGxlLnBuZyIgd2lkdGg9IjE3NXB4IiAvPg0KPC9kaXY+DQotIE1vZGlmaWVyIGwnZW5jb2RhZ2UuDQotIFN1cHByaW1lciBsZXMgZG91YmxvbnMuDQotIERpdmlzZXIgbGVzIGNlbGx1bGVzIGNvbXBvc8OpZXMgZGUgdmFsZXVycyBtdWx0aXBsZXMuICAgDQotIFJlY29kZXIgbGVzIHZhbGV1cnMgbWFucXVhbnRlcy4NCi0gUmVww6lyZXIgbGVzIGVycmV1cnMgZGUgc2Fpc2llLCBsZXMgdmFsZXVycyBhYmVycmFudGVzLi4uDQotIEZ1c2lvbm5lciBkZXMgZmljaGllcnMuDQotIEZ1c2lvbm5lciBkZXMgY29sb25uZXMuDQotIEFncsOpZ2VyIGRlcyB2YWxldXJzIGRlIHZhcmlhYmxlcy4NCi0gQ3LDqWVyIGRlcyB2YXJpYWJsZXMuDQotIENoYW5nZXIgbGUgZm9ybWF0IGRlcyB2YXJpYWJsZXMuDQotIENoYW5nZXIgbGUgZm9ybWF0IGR1IGZpY2hpZXIuDQotIFRyYW5zZm9ybWVyIGxlcyBjb2xvbm5lcyBlbiByYW5nw6llcyAoZm9ybWF0ICJ3aWRlIiBlbiAibG9uZyIpLg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyAyLiBQb3VycXVvaSBPcGVuUmVmaW5lPw0KDQotIFBsdXNpZXVycyBsYW5nYWdlcyBkZSBwcm9ncmFtbWF0aW9uIGV0IG91dGlscyBkJ2FuYWx5c2Ugb3UgZGUgZ2VzdGlvbiBkZSBkb25uw6llcyBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpcywgbWFpcyBPcGVuUmVmaW5lIGEgw6l0w6kgY3LDqcOpIHNww6ljaWZpcXVlbWVudCBwb3VyIGZhaXJlIGxlIG3DqW5hZ2UhDQoNCi0gUGx1cyBmYWNpbGUgcXVlIFIgZXQgcGx1cyBlZmZpY2FjZSBxdSdFeGNlbC4NCg0KLSBQZXJtZXQgZGUgZmFjaWxlbWVudCBpZGVudGlmaWVyIGV0IGRlIGNvcnJpZ2VyIGVuIGxvdCBkZXMgZG9ubsOpZXMgaW5jb21wbMOodGVzLCBtYW5xdWFudGVzLCBlcnJvbsOpZXMsIGluY29ow6lyZW50ZXMsIG5vbiBwZXJ0aW5lbnRlcywgbWFsIGZvcm1hdMOpcywgcXUnZWxsZXMgc29pZW50IG51bcOpcmlxdWVzIG91IHRleHR1ZWxsZXMgPT4gc2F1dmUgdGVtcHMgZXQgw6luZXJnaWUuDQoNCg0KPGNlbnRlcj4gICANCg0KPGltZyBzcmM9ImltYWdlcy8xOTE4LUFkLTg2MC04NjB4NTczLmpwZyIgd2lkdGg9IjYwJSIvPg0KDQo8L2NlbnRlcj4gICANCg0KDQo8L2JyPg0KDQojIyMgRm9uY3Rpb25zIHNww6ljaWFsaXPDqWVzIHBvdXI6DQoNCi0gKkV4cGxvcmVyKiBzZXMgZG9ubsOpZXMgc291cyB0b3VzIHNlcyBhbmdsZXMgKGdyw6JjZSDDoCBkZXMgZmlsdHJlcywgdHJpcywgZmFjZXR0ZXMsIHJlZ3JvdXBlbWVudHMpLiAgIA0KLSAqTmV0dG95ZXIqIDogcmVww6lyZXIgZGVzIGVycmV1cnMsIG1vZGlmaWVyIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzLi4uDQotICpUcmFuZm9ybWVyKiA6IGNoYW5nZXIgZm9ybWF0cyBkZSBzZXMgdmFyaWFibGVzLCBjcsOpZXIgZGUgbm91dmVsbGVzIHZhcmlhYmxlcyBzdXIgbGEgYmFzZSBkZXMgY29sb25uZXMgcHLDqXNlbnRlcy4uLg0KLSAqRW5yaWNoaXIqIDogZnVzaW9ubmVyIGRlcyBmaWNoaWVycywgaW1wb3J0ZXIgZGVzIGRvbm7DqWVzIGVuIGxpZ25lIChBUEksIFVSTHMpLCByw6ljb25jaWxpYXRpb24gKFdpa2lkYXRhIGV0IFthdXRyZXMgc291cmNlcyBleHRlcm5lc10oaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL1JlY29uY2lsYWJsZS1EYXRhLVNvdXJjZXMpKS4uLg0KLSAqQXV0b21hdGlzZXIqIChyw6l1dGlsaXNlciBzb24gaGlzdG9yaXF1ZSBkZSBtYW5pcHVsYXRpb25zKQ0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgMi4xLiBFeGVtcGxlcyBkJ3V0aWxpc2F0aW9uDQoNCkhhcm1vbmlzZXIsIHN0YW5kYXJkaXNlciwgdW5pZm9ybWlzZXIuLi4NCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SOC5qcGcpICAgDQoNCjwvY2VudGVyPiAgDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIyAyLjIuIFBvdXIgYXZvaXIgZGUgYmVsbGVzIGRvbm7DqWVzICp0aWR5Kg0KDQpQZXJtZXQgZCdhcHBsaXF1ZXIgbGVzIHByaW5jaXBlcyBkdSBbVGlkeWRhdGFdKGh0dHBzOi8vcjRkcy5oYWQuY28ubnovdGlkeS1kYXRhLmh0bWwpIA0KDQo+IOKAnFRpZHkgZGF0YXNldHMgYXJlIGFsbCBhbGlrZSwgYnV0IGV2ZXJ5IG1lc3N5IGRhdGFzZXQgaXMgbWVzc3kgaW4gaXRzIG93biB3YXku4oCdIOKAk+KAkyBIYWRsZXkgV2lja2hhbQ0KDQo8L2JyPg0KDQoqKlRyb2lzIHByaW5jaXBlcyBkZSBiYXNlOioqDQoNCjEuIENoYXF1ZSBjb2xvbm5lIGVzdCB1bmUgKip2YXJpYWJsZSoqLg0KMi4gQ2hhcXVlIGxpZ25lIGVzdCB1bmUgKipvYnNlcnZhdGlvbioqLg0KMy4gQ2hhcXVlIGNlbGx1bGUgw6AgKip1bmUgc2V1bGUgdmFsZXVyKiouDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjEwLmpwZykgDQoNCjwvY2VudGVyPiAgDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIyAyLjMuICBQcmluY2lwYWxlcyBjYXJhY3TDqXJpc3RpcXVlcw0KDQotIExvZ2ljaWVsIGdyYXR1aXQgZXQgb3V2ZXJ0IHV0aWxpc8OpIHBhciB1bmUgbGFyZ2UgY29tbXVuYXV0w6kuDQoNCi0gQ3LDqcOpIGVuIDIwMTAgKCpGcmVlYmFzZSBHcmlkd29ya3MqKSwgcmFjaGV0w6kgcGFyIEdvb2dsZSBlbiAyMDEwICgqR29vZ2xlIFJlZmluZSopLCBwdWlzIG91dmVydHVyZSBkdSBjb2RlIGVuIDIwMTIgZXQgcmVwcmlzIHBhciBjb21tdW5hdXTDqSBxdWkgbGUgZMOpcGxhY2Ugc3VyIEdpdGh1YiBldCBkZXZpZW50ICpPcGVuUmVmaW5lKi4NCg0KLSBNdWx0aXBsYXRlZm9ybWVzOiBXaW5kb3dzLCBNYWMsIExpbnV4Lg0KDQotIEludGVyZmFjZSBzZW1ibGFibGUgw6AgdW4gdGFibGV1ciBjb21tZSBFeGNlbCwgbWFpcyBkb250IGxlIGZvbmN0aW9ubmVtZW50IHMnYXBwYXJlbnRlIHBsdXMgw6AgdW5lIGJhc2UgZGUgZG9ubsOpZXMgKHBhciBleGVtcGxlIGxlcyB0cmFpdGVtZW50cyBzb250IHPDqXBhcsOpcyBkZXMgZG9ubsOpZXMsIGllIGxlcyBmb3JtdWxlcyBuZSBzb250IHBhcyBlbnJlZ2lzdHLDqWVzIGRhbnMgbGVzIGNlbGx1bGVzIG1haXMgZGFucyB1biBzY3JpcHQpLg0KDQotIEFzc29jaWUgbGEgZmFjaWxpdMOpIGQndXNhZ2UgZCd1biBsb2dpY2llbCBjb21tZSBFeGNlbCDDoCBsYSBwdWlzc2FuY2UgZCdvdXRpbHMgZGUgcHJvZ3JhbW1hdGlvbiBldCBkJ2FsZ29yaXRobWVzLg0KDQotIFVzYWdlIGRlIGwnKippbnRlcmZhY2UgZ3JhcGhpcXVlKiogZXQvb3UgKipzY3JpcHRzIEdSRUwqKiAoKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSopOiBwcm9wb3NlIHVuIGVuc2VtYmxlIGRlIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIGRvbmMgbmUgbsOpY2Vzc2l0ZSDDoCBsYSBiYXNlIGF1Y3VuZSBjb21ww6l0ZW5jZSBlbiBwcm9ncmFtbWF0aW9uIG91IGFuYWx5c2UsIG1haXMgbCd1c2FnZSBkdSBsYW5nYWdlIHBlcm1ldCBkJ2FsbGVyIGJlYXVjb3VwIHBsdXMgbG9pbi4NCg0KLSBQYXJ0aWN1bGnDqHJlbWVudCBwdWlzc2FudCBwb3VyIGxlIG5ldHRveWFnZSBkZSB0YWJsZSBkZSBkb25uw6llcyBhdmVjIGR1IGNvbnRlbnUgdGV4dHVlbC4NCg0KLSAqKlJlcHJvZHVjdGliaWxpdMOpKiohIFBlcm1ldCBkZSBnYXJkZXIgdW4gaGlzdG9yaXF1ZSBkZSB0b3V0ZXMgbGVzIG1hbmlwdWxhdGlvbnMgZWZmZWN0dcOpZXMgc3VyIHNlcyBkb25uw6llcyBhZmluIGRlIGxlcyBwYXJ0YWdlciwgZGUgbGVzIHLDqXV0aWxpc2VyIHN1ciBkJ2F1dHJlcyBkb25uw6llcy4uLg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KDQoqKsOAIG5vdGVyKiogDQoNCk9wZW5SZWZpbmUgbidlc3QgcGFzIHVuIG91dGlsIGQnYW5hbHlzZSBvdSBkZSB2aXN1YWxpc2F0aW9uIGV0IG5lIHBlcm1ldCBwYXMgZGUgY3LDqWVyIHVuIGpldSBkZSBkb25uw6llcyDDoCBwYXJ0aXIgZGUgesOpcm8uIENlIG4nZXN0IHBhcyB1biBvdXRpbCBkZSByZW1wbGFjZW1lbnQgbWFpcyBjb21wbMOpbWVudGFpcmUuDQoNCjwvZGl2Pg0KDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIDMuIEluc3RhbGxhdGlvbiBldCBmb25jdGlvbm5lbWVudCBnw6luw6lyYWwNCg0KLSBbVMOpbMOpY2hhcmdlciBldCBkw6l6aXBwZXJdKGh0dHBzOi8vb3BlbnJlZmluZS5vcmcvZG93bmxvYWQuaHRtbCkgbGUgbG9naWNpZWwgZGFucyB1biBkb3NzaWVyIGRlIHNvbiBjaG9peC4NCg0KLSBDcsOpw6kgZW4gbGFuZ2FnZSBKYXZhIFtkb25jIG7DqWNlc3NpdGUgbCdpbnN0YWxsYXRpb24gZGUgSmF2YSAoNjQgYml0cyBkZSBwcsOpZsOpcmVuY2UpXShodHRwczovL3d3dy5qYXZhLmNvbS9lbi9kb3dubG9hZC8pLg0KDQotIE5hdmlnYXRldXJzIMOgIHByaXZpbMOpZ2llcjogQ2hyb21lLCBPcGVyYSwgRWRnZS4gRmlyZWZveCBwZXV0IHBvc2VyIHByb2Jsw6htZSAobmUgZm9uY3Rpb25uZSBwYXMgZGFucyBJRSkuICANCg0KLSBMZSBmb25jdGlvbm5lbWVudCBkJ09wZW5SZWZpbmUgcGV1dCDDqnRyZSB1biBwZXUgZMOpcm91dGFudCBhdSBkw6lwYXJ0IGNhciBpbCBuJ3kgYSBwYXMgZCdpbnN0YWxsYXRpb24gZW4gYm9ubmUgZXQgZHVlIGZvcm1lIGNvbW1lIHBvdXIgdW4gbG9naWNpZWwgcsOpZ3VsaWVyLg0KDQotIFBvdXIgZMOpbWFycmVyIGxlIGxvZ2ljaWVsLCBjbGlxdWVyIHN1ciBsZSBmaWNoaWVyIGBgIGBvcGVucmVmaW5lLmV4ZWAgYGAgb3UgYHJlZmluZS5iYXRgLiBJbCBlc3QgdXRpbGUgZGUgZmFpcmUgdW4gY2xpYy1kcm9pdCBzdXIgbGUgZmljaGllciAuZXhlIHBvdXIgbCfDqXBpbmdsZXIgZGFucyBzYSBiYXJyZSBkZSB0w6JjaGVzIChzdXIgTWFjLCBkw6lwbGFjZXIgbCdpY8O0bmUgT3BlblJlZmluZSBkYW5zIGxlIGRvc3NpZXIgZCdhcHBsaWNhdGlvbnMgZXQgZG91YmxlIGNsaXF1ZXIgc3VyIGNlbGxlLWNpKS4NCg0KLSBVbmUgZmVuw6p0cmUgZGUgY29tbWFuZGUgbm9pcmUgcydvdXZyaXJhIGV0IGxhbmNlcmEgbCdvdXZlcnR1cmUgZCd1biBvbmdsZXQgZGFucyBsZSBuYXZpZ2F0ZXVyIHdlYi4gIA0KDQotIExhIGZlbsOqdHJlIGRlIGNvbW1hbmRlcyBwZXV0IGVuc3VpdGUgw6p0cmUgaWdub3LDqWUgbWFpcyBORSBQQVMgTEEgRkVSTUVSISBFbGxlIG5lIHNlcnZpcmEgcXUnw6AgZmVybWVyIGxhIHNlc3Npb24gZGUgdHJhdmFpbC4gIA0KDQotIFNpIGxlIG5hdmlnYXRldXIgbmUgcydvdXZyZSBwYXMgYXV0b21hdGlxdWVtZW50LCBzYWlzaXIgbCdhZHJlc3NlIGh0dHA6Ly8xMjcuMC4wLjE6MzMzMy8gb3UgaHR0cDovL2xvY2FsaG9zdDozMzMzIGRhbnMgdW4gb25nbGV0LiANCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMTcuanBnKXt3aWR0aD04MCV9DQoNCjwvY2VudGVyPiAgDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIyAzLjEuIFRyYXZhaWwgbG9jYWwNCg0KLSBSZXBvc2UgZG9uYyBzdXIgZGV1eCBjb21wb3NhbnRlczogdW4gKipzZXJ2ZXVyIHdlYiBsb2NhbCoqIGV0IHVuICoqb25nbGV0IGRlIG5hdmlnYXRldXIgd2ViKiogcG9pbnRhbnQgdmVycyBsJ2FkcmVzc2UgZHUgc2VydmV1ciBzdXIgc29uIHBvc3RlLg0KDQotIExlIHRyYXZhaWwgc2UgZmFpdCBkYW5zIHVuIG9uZ2xldCBkZSBuYXZpZ2F0ZXVyIHF1aSBlc3QgdW5lIHNpbXBsZSBpbnRlcmZhY2UgZ3JhcGhpcXVlIHBvdXIgaW50ZXJhZ2lyIGF2ZWMgY2Ugc2VydmV1ciBsb2NhbCwgbWFpcyAqKmxlcyBkb25uw6llcyBuZSBzb250IHBhcyBzdXIgbGUgIm51YWdlIioqLg0KDQotIFRyYXZhaWwgbG9jYWwgZG9uYyBwYXMgZCdlbnZpcm9ubmVtZW50IGNvbGxhYm9yYXRpZi4gDQoNCi0gTGVzIGZpY2hpZXJzIHByb2dyYW1tZXMgc2UgdHJvdXZlcm9udCBkYW5zIGxlIGRvc3NpZXIgZCdpbnN0YWxsYXRpb24gZXQgbGVzIGZpY2hpZXJzIGRlIHByb2pldHMgZGFucyBsZSAqd29ya3NwYWNlIGRpcmVjdG9yeSouDQoNCi0gT3BlblJlZmluZSBuZSBtb2RpZmllIHBhcyBsZSBmaWNoaWVyIG9yaWdpbmFsLCBpbCB0cmF2YWlsbGUgw6AgcGFydGlyIGQndW5lICoqY29waWUgZW4gbcOpbW9pcmUgc3RvY2vDqWUgZW4gYXJjaGl2ZXMqKiBkYW5zIGxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwuDQoNCi0gTGUgcHJvamV0IGVzdCBlbnJlZ2lzdHLDqSBlbiBmb3JtYXQgT3BlblJlZmluZSBhdXRvbWF0aXF1ZW1lbnQgZGFucyBsZSBkb3NzaWVyIGRlIHRyYXZhaWwgY2hhcXVlIDUgbWludXRlcyAoW3BldXQgw6p0cmUgbW9kaWZpw6ldKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvcnVubmluZyNqdm0tcHJlZmVyZW5jZXMpKS4NCg0KLSBMZSBmaWNoaWVyIGRlIGRvbm7DqWVzIHVuZSBmb2lzIG5ldHRvecOpIHBvdXJyYSDDqnRyZSBleHBvcnTDqSBlbiBkaWZmw6lyZW50cyBmb3JtYXRzIGV0IGwnaGlzdG9yaXF1ZS9zeW50YXhlIHBvdXJyYSDDqnRyZSBleHRyYWl0IGVuIGZvcm1hdCBKU09OIGV0IGVucmVnaXN0csOpIGRhbnMgdW4gZmljaGllciAudHh0Lg0KDQotIFBvdXIgZmVybWVyIGxhIHNlc3Npb24gZGUgdHJhdmFpbCBjb3JyZWN0ZW1lbnQsIGZhaXJlIGBDdHJsICsgY2AgZGFucyBmZW7DqnRyZSBkZSBjb21tYW5kZSAocGV1dCDDqnRyZSBuw6ljZXNzYWlyZSBkZSBsZSBmYWlyZSBwbHVzIGQndW5lIGZvaXMpID0gZW5yZWdpc3RyZSBsZSBwcm9qZXQgZXQgZmVybWUgbGUgc2VydmV1ci4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCioqw4Agbm90ZXIqKiAgDQotIFBlcm1ldCBkZSB0cmF2YWlsbGVyIHN1ciBkZSBncm9zIGZpY2hpZXJzIG1haXMgbGEgdGFpbGxlIHBvc3NpYmxlIGVzdCB0b3V0IGRlIG3Dqm1lIGxpbWl0w6llLCBsYSBwZXJmb3JtYW5jZSBwZXV0IGRldmVuaXIgcHJvYmzDqW1hdGlxdWUgw6AgcGx1c2lldXJzIGNlbnRhaW5lcyBkZSBtaWxsaWVycyBkZSBsaWduZXMgKHRvdXQgZMOpcGVuZGFudCBkdSBub21icmUgZGUgY29sb25uZXMpIGRvbmMgcGFzIHZyYWltZW50IGTDqXZlbG9wcMOpIHBvdXIgZmFpcmUgZHUgYmlnIGRhdGEuDQotIFRyYXZhaWxsZSBhdmVjIDFHbyBkZSBtw6ltb2lyZSBwYXIgZMOpZmF1dC4gw4AgcGx1cyBkZSAxMDAgMDAwIGxpZ25lcywgaWwgcGV1dCDDqnRyZSBwcsOpZsOpcmFibGUgZCdbYXVnbWVudGVyIGxhIG3DqW1vaXJlXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2luc3RhbGxpbmcjaW5jcmVhc2luZy1tZW1vcnktYWxsb2NhdGlvbikgZGUgdHJhdmFpbDogIA0KICAtIE91dnJpciBsZSBmaWNoaWVyIHJlZmluZS5pbmkgZGFucyBub3RlcGFkIGV0IG1vZGlmaWVyIGxhIGxpZ25lIFJFRklORV9NRU1PUlkgPSBwYXJhbWV0cmUuICANCiAgLSBQYXIgbGEgc3VpdGUgbGFuY2VyIE9SIGF2ZWMgbGUgZmljaGllciAqcmVmaW5lLmJhdCogZXQgbm9uICpvcGVucmVmaW5lLmV4ZSAqLiAgIA0KDQo8L2Rpdj4NCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIyAzLjIuIMOJY3JhbiBkJ2FjY3VlaWwNCg0KLSDDgCBwYXJ0aXIgZHUgbWVudSBkZSBnYXVjaGUgaWwgZXN0IHBvc3NpYmxlIGRlIGBDcsOpZXIgdW4gcHJvamV0YCwgYE91dnJpciB1biBwcm9qZXRgIChoaXN0b3JpcXVlIGRlcyBwcm9qZXRzIGVucmVnaXN0csOpcykgb3UgYEltcG9ydGVyIHVuIHByb2pldCBgIChhcmNoaXZlcyAuemlwIHNlIHRyb3V2YW50IGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsKS4gICANCg0KLSBQb3VyIGNoYW5nZXIgbGEgbGFuZ3VlIGRlIGwnaW50ZXJmYWNlIGF1IGZyYW7Dp2FpcywgY2xpcXVlciBzdXIgbCdvbmdsZXQgYExhbmd1ZWAgZGFucyBsZSBtZW51IGRlIGdhdWNoZS4gIA0KDQotIExlIGZpY2hpZXIgcGV1dCDDqnRyZSBjcsOpw6kgw6AgcGFydGlyIGRlIGRpZmbDqXJlbnRlcyBzb3VyY2VzOiBgQ2V0IG9yZGluYXRldXJgIChwb3N0ZSBsb2NhbCksIGBBZHJlc3NlcyB3ZWIgKFVSTHMpYCwgYFByZXNzZS1wYXBpZXJgIChjb3Bpw6ktY29sbMOpKSwgYEdvb2dsZSBkYXRhYCAoR29vZ2xlIHNoZWV0cykuLi4pIGV0IGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMgKC5jc3YsIC50eHQsIC54bWwsIC54bHMsIC5KU09OLCAuemlwIGV0IG5vbiB0YXIuLi4gKGNlcnRhaW5lcyBleHRlbnNpb25zIHBlcm1ldHRlbnQgbCd1c2FnZSBkJ2F1dHJlcyBmb3JtYXRzIGNvbW1lIHJkZikuICANCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMS5qcGcpICANCg0KPC9jZW50ZXI+ICANCg0KLSBEZXV4IGZpY2hpZXJzIG91IHBsdXMgcGV1dmVudCDDqnRyZSBpbXBvcnTDqXMgZW4gbcOqbWUgdGVtcHMuIExlcyBsaWduZXMgc2Vyb250IGltcG9ydMOpZXMgdW5lIMOgIGxhIHN1aXRlIGRlIGwnYXV0cmUgc2Vsb24gbCdvcmRyZSBkJ2ltcG9ydGF0aW9uICh1bmUgY29sb25uZSBwZXJtZXR0YW50IGQnaWRlbnRpZmllciBsZSBmaWNoaWVyIHNvdXJjZSBzZXJhIGNyw6nDqWUgYXV0b21hdGlxdWVtZW50KS4gDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIyAzLjMuIEhpc3RvcmlxdWUgZGVzIHByb2pldHMNCg0KLSBMJ29uZ2xldCBgT3V2cmlyIHVuIHByb2pldGAgcGVybWV0Og0KICAtIEQnYWNjw6lkZXIgZXQgZCdvdXZyaXIgdG91cyBsZXMgcHJvamV0cyBlbnJlZ2lzdHLDqXMgbG9jYWxlbWVudC4NCiAgLSBEJ8OpZGl0ZXIgc2VzIG3DqXRhZG9ubsOpZXMuDQogIC0gRCdhY2PDqWRlciBhdSBkb3NzaWVyIGRlIHRyYXZhaWwgKGTDqWZpbmkgcGFyIGTDqWZhdXQpIG/DuSBPcGVuUmVmaW5lIHN0b2NrZSBsZXMgYXJjaGl2ZXMgZGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzIHBhciBsZSBiaWFpcyBkdSBsaWVuIGBQYXJjb3VyaXIgbGUgZG9zc2llciBkZSBsJ2VzcGFjZSBkZSB0cmF2YWlsYC4NCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMy5qcGcpDQoNCjwvY2VudGVyPiAgDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIDQuIENyw6llciB1biBwcm9qZXQNCg0KLSBQb3VyIG91dnJpciB1biBmaWNoaWVyIMOgIHBhcnRpciBkZSBzb24gcG9zdGUsIGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCAtID4gYENldCBvcmRpbmF0ZXVyYCAtID4gYHPDqWxlY3Rpb25uZXIgZmljaGllcnNgIHN1ciBzb24gIHBvc3RlIC0+IGBTdWl2YW50YC4gIA0KDQotIFVuZSBmZW7DqnRyZSBzJ291dnJlIGVuc3VpdGUgcG91ciBwZXJtZXR0cmUgZGUgcHLDqS12aXN1YWxpc2VyIHNvbiBqZXUgZGUgZG9ubsOpZXMgZXQgZGUgbW9kaWZpZXIsIHNpIG7DqWNlc3NhaXJlLCBsZXMgb3B0aW9ucyBkJ2ltcG9ydGF0aW9uIGVuIGZvbmN0aW9uIGRlcyBjYXJhY3TDqXJpc3RpcXVlcyBkdSBmaWNoaWVyIGRlIGRvbm7DqWVzOiBtb2RpZmljYXRpb24gZHUgZm9ybWF0IGRlIGZpY2hpZXIgcydpbCBuJ2EgcGFzIMOpdMOpIGlkZW50aWZpw6kgY29ycmVjdGVtZW50ICg1KSwgbCdlbmNvZGFnZSBkZXMgY2FyYWN0w6hyZXMgW1VURi04XSAoNiksIGxlIHRyYWl0ZW1lbnQgZGVzIGVudMOqdGVzIGV0IHByZW1pw6hyZXMgbGlnbmVzICg5KS4uLg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMi5qcGcpICANCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIENyw6llciB1biBub3V2ZWF1IHByb2pldCBlbiBpbXBvcnRhbnQgbGUgZmljaGllciBgSW5jaWRlbnRzIG3DqXRyby5jc3ZgIGRpc3BvbmlibGUgc3VyIGxlIHNpdGUgW0Rvbm7DqWVzIG91dmVydGVzIE1vbnRyw6lhbF0oaHR0cHM6Ly9kb25uZWVzLm1vbnRyZWFsLmNhL3NvY2lldGUtZGUtdHJhbnNwb3J0LWRlLW1vbnRyZWFsL2luY2lkZW50cy1kdS1yZXNlYXUtZHUtbWV0cm8pICh2b2lyIGF1c3NpIGxlIHNpdGUgZGUgbGEgU1RNIFtJbmRpY2F0ZXVycyBkZSBwZXJmb3JtYW5jZSByZWxpw6lzIGF1IHNlcnZpY2UgbcOpdHJvXShodHRwOi8vd3d3LnN0bS5pbmZvL2ZyL2EtcHJvcG9zL2luZm9ybWF0aW9ucy1lbnRyZXByaXNlLWV0LWZpbmFuY2llcmVzL2V4cGVyaWVuY2UtY2xpZW50L2luZGljYXRldXJzLWRlLXBlcmZvcm1hbmNlLXJlbGllcykpDQoNCi0gRXhwbG9yZXIgbGVzIG9wdGlvbnMgZCdpbXBvcnRhdGlvbiAtPiBQb3J0ZXIgdW5lIGF0dGVudGlvbiBwYXJ0aWN1bGnDqHJlIGF1eCBvcHRpb25zOiBgU3VwcHJpbWVyIGxlcyBlc3BhY2VzYCAoOCAtPiBjb2NoZXIpLCAJYFV0aWxpc2VyIGxlIGNhcmFjdMOocmUJIiBwb3VyIGZlcm1lciBsZXMgY2VsbHVsZXMgY29udGVuYW50IGxlcyBzw6lwYXJhdGV1cnMgZGUgY29sb25uZXNgICgxMCAtPiBjb2NoZXIgb3Ugbm9uKSwgYEFuYWx5c2VyIGxlIHRleHRlIGRlcyBjZWxsdWxlcyBjb21tZSBub21icmVzICwgZGF0ZXPigKZgICgxMSAtPiBkw6ljb2NoZXIpDQoNCi0gQ2hhbmdlciBsZSBgTm9tIGR1IHByb2pldGAgWzJdIGV0IGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCBbNF0gLSBFbiBjYXMgZGUgcHJvYmzDqG1lLCBpbCBlc3QgcG9zc2libGUgZGUgcmVjb21tZW5jZXIgbGUgcHJvY2Vzc3VzIFsxXS4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyA1LiBFeHBsb3JlciBsJ2ludGVyZmFjZQ0KDQotIEwnaW50ZXJmYWNlIGVzdCBzaW1pbGFpcmUgw6AgRXhjZWwgbWFpcyBvbiBuZSBwZXV0IHZvaXIgbCdlbnNlbWJsZSBkZXMgbGlnbmVzLCBsYSAibG9naXF1ZSIgZCdPcGVuUmVmaW5lIHJlcG9zZSBzdXIgbGUgdHJhdmFpbCBlbiAqKmNvbG9ubmVzKiouDQoNCi0gT3BlblJlZmluZSBwcm9wb3NlIGRldXggdnVlcyBkZXMgZG9ubsOpZXM6IGBsaWduZXNgIGV0IGBlbnRyw6llcy5gIExlcyBkb25uw6llcyBzb250IGfDqW7DqXJhbGVtZW50IHByw6lzZW50w6llcyBlbiBtb2RlIGBsaWduZXNgLCBjJ2VzdC3DoC1kaXJlIGNoYXF1ZSBsaWduZSByZXByw6lzZW50ZSB1bmUgb2JzZXJ2YXRpb24uIExlIG1vZGUgYGVudHLDqWVzYCBwZXJtZXQgZCdhc3NvY2llciBwbHVzaWV1cnMgbGlnbmVzIMOgIHVuZSBvYnNlcnZhdGlvbi4NCg0KLSBJbCBlc3QgZG9uYyBwb3NzaWJsZSBkZSBtb2RpZmllciBsYSBzdHJ1Y3R1cmUgZHUgZmljaGllciBwb3VyIHF1ZSBwbHVzaWV1cnMgbGlnbmVzIHNvaWVudCBhc3NvY2nDqWVzIMOgIHVuIHNldWwgY2FzIGVuIHNlIGJhc2FudCBzdXIgbGEgY29sb25uZSBjbMOpICgqKnNldWxlIGxhIGxpZ25lIG9yaWdpbmFsZSBzZXJhIG51bcOpcm90w6llKiopLCBtYWlzIGRvaXQgc2UgZmFpcmUgYXZlYyBwcsOpY2F1dGlvbnMuIFBvdXIgbGVzIGxvZ2ljaWVscyBkJ2FuYWx5c2UsIGxlIGZvcm1hdCAqdGlkeSogKGBsaWduZXNgKSBlc3Qgw6AgcHJpdmlsw6lnaWVyLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1I0LmpwZykgDQoNCjwvY2VudGVyPiAgDQoNCjEuIExpZW4gc291cyBsJ2ljw7RuZSByZW52b2kgdmVycyBsYSBwYWdlIGQnYWNjdWVpbC9pbXBvcnRhdGlvbi4NCjIuIFJlbm9tbWVyIGxlIG5vbSBkZSBzb24gcHJvamV0IGVuIHRvdXQgdGVtcHMuDQozLiBQZXJtYWxpZW4gcXVpIHBlcm1ldCBkZSByZXZlbmlyIMOgIHVuZSB2dWUgcHLDqWNpc2UgKGFmZmljaGFnZSwgdHJpLCBmYWNldHRlcy4uLikgZHUgcHJvamV0Lg0KNC4gTm9tYnJlIGRlIGxpZ25lcy9vYnNlcnZhdGlvbnMgZHUgZmljaGllci4NCjUuIENoYW5nZW1lbnQgZHUgbW9kZSBsaWduZXMgb3Ugb2JzZXJ2YXRpb25zLg0KNi4gTW9kaWZpZXIgbGUgbm9tYnJlIGRlIGxpZ25lcyBhZmZpY2jDqWVzLg0KNy4gUGFzc2VyIGQndW5lIHBhZ2Ugw6AgbCdhdXRyZS4NCjguIE91dnJpciB1biBub3V2ZWwgb25nbGV0IE9wZW5SZWZpbmUuDQo5LiBFeHBvcnRlciBsZSBmaWNoaWVyIGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMuDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPiANCg0KIyMgNS4xLiBMJ8OpZGl0aW9uIGRlIGNlbGx1bGVzDQoNCi0gSWwgZXN0IHBvc3NpYmxlIGQnw6lkaXRlciBtYW51ZWxsZW1lbnQgbGUgY29udGVudSBkZSBjZWxsdWxlcyBpbmRpdmlkdWVsbGVzIGVuIHNlIHBsYcOnYW50IHN1ciBjaGFjdW5lIGV0IGVuIGNsaXF1YW50IGBlZGl0YCwgbWFpcyBPcGVuUmVmaW5lIHByaXZpbMOpZ2llIGxlICoqdHJhdmFpbCBlbiBsb3QgcGFyIGNvbG9ubmVzKiogcG91ciBmaWx0cmVyLCB0cmllciwgdHJhbnNmb3JtZXIuDQoNCi0gTCfDqWRpdGlvbiBkaXJlY3RlIHBldXQgcydhcHBsaXF1ZXIgaW5kaXZpZHVlbGxlbWVudCBvdSBzdXIgdG91dGVzIGxlcyBjZWxsdWxlcyBhdmVjIGxhIG3Dqm1lIHZhbGV1ciBkYW5zIGNldHRlIGNvbG9ubmUuDQoNCi0gUGVybWV0IMOpZ2FsZW1lbnQgZGUgbW9kaWZpZXIgbGUgZm9ybWF0IGRlIGxhIGNlbGx1bGUuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjIyLmpwZyl7d2lkdGg9ODAlfQ0KDQo8L2NlbnRlcj4gIA0KDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIERhbnMgbGEgY29sb25uZSAqQ2F1c2UgcHJpbWFpcmUqIGNsaXF1ZXIgZGFucyB1bmUgY2VsbHVsZSAqQXV0cmVzKiwgw6lkaXRlciBzb24gY29udGVudSBwb3VyICphdXRyZSogZXQgYXBwbGlxdWVyIMOgIGxhIGNlbGx1bGUuIA0KLSBEYW5zIGxhIGNvbG9ubmUgKlBvcnRlKiwgbW9kaWZpZXIgbGUgZm9ybWF0IGRlIG4naW1wb3J0ZSBxdWVsbGUgY2VsbHVsZSDDoCAqTm9tYnJlKiBldCBhcHBsaXF1ZXIgw6AgdG91dGVzIGxlcyBjZWxsdWxlcyBpZGVudGlxdWVzLg0KLSBEYW5zIGxhIGNvbG9ubmUgKsOJdmFjdWF0aW9uKiwgbW9kaWZpZXIgbGUgY29udGVudSBkJ3VuZSBjZWxsdWxlICIjIiBwYXIgKk5vbiogZXQgYXBwbGlxdWVyIMOgIHRvdXRlcyBsZXMgY2VsbHVsZXMgaWRlbnRpcXVlcy4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgNS4yLiBGb3JtYXQgZGVzIGRvbm7DqWVzDQoNCiMjIyMgVHJvaXMgZm9ybWF0cyBkZSBiYXNlOiANCiAgMS4gQ2hhw65uZSBkZSBjYXJhY3TDqHJlcw0KICAyLiBOb21icmUNCiAgMy4gRGF0ZSAobm9ybWUgSVNPLTg2MDEgWVlZWS1NTS1ERFRISDpNTTpTU1opKg0KICANCiAgPC9icj4NCiAgDQojIyMjIERldXggZm9ybWF0cyBkw6ljb3VsYW50IGQnYWN0aW9uczogDQogIC0gRXJyZXVyIChmb3JtYXQgYXR0cmlidcOpIHN1aXRlIMOgIHVuZSBlcnJldXIgZGUgdHJhbnNmb3JtYXRpb24pICANCiAgLSBOdWxsKioNCg0KPC9icj4NCg0KIyMjIyBEZXV4IGF1dHJlcyB0eXBlcyBwYXJ0aWN1bGllcnMgZMOpY291bGFudCBkZSBtYW5pcHVsYXRpb25zDQogIC0gQm9vbMOpZW4gKHZhbGV1ciBiaW5haXJlIFQgb3UgRikNCiAgLSAqQXJyYXkqIChsaXN0ZSBkZSB2YWxldXJzIHPDqXBhcsOpZXMgcGFyIHVuZSB2aXJndWxlIGVudHJlIGNyb2NoZXRzIHBvdXZhbnQgw6p0cmUgdHJhbnNmb3Jtw6llcykNCg0KPC9icj4NCg0KIyMjIyMgKiBGb3JtYXQgZGF0ZQ0KDQotIFNlbG9uIGxlcyBiZXNvaW5zLCBsZXMgZGF0ZXMgcGV1dmVudCDDqnRyZSB0cmFpdMOpZXMgc291cyBmb3JtZSBkZSBgdGV4dGVgLCBkZSBgbm9tYnJlYCBvdSBgZGF0ZWAgKGxlIGZvcm1hdCBkYXRlIGVzdCBzdXJ0b3V0IG7DqWNlc3NhaXJlIHBvdXIgbGVzIGNhbGN1bHMgZGUgZGF0ZXMpLg0KLSBMZSBmb3JtYXQgZGF0ZSByZXBvc2Ugc3VyIHVuZSBzw6lyaWUgZCdvdXRpbHMgZXQgZGUgIHN0YW5kYXJkcyBwb3VyIHJlY29ubmFpdHJlIGV0IGNvbnZlcnRpciBsZXMgdmFsZXVycyBvcmlnaW5hbGVzIGVuIGRhdGUuIA0KLSBQb3VyIHF1J3VuZSBjZWxsdWxlIHNvaXQgcmVjb25udWUgY29tbWUgZGF0ZSwgZWxsZSBzZXJhIHRyYW5zZm9ybcOpZSBhdSBmb3JtYXQgKklTTy04NjAxLWNvbXBsaWFudCouDQotIFBvc3NpYmxlIGRlIG1vZGlmaWVyIGNlIGZvcm1hdCBwb3VyIHF1J2lsIHNvaXQgcGx1cyBmYWNpbGVtZW50IGxpc2libGUgw6AgbCdleHBvcnRhdGlvbi4NCg0KPC9icj4NCg0KIyMjIyMgKiogRm9ybWF0ICJtYW5xdWFudCINCg0KLSBPcGVuUmVmaW5lIGZhaXQgdW5lIGRpc3RpbmN0aW9uIGVudHJlIGxlcyAqKmNlbGx1bGVzIHZpZGVzIGF2ZWMgZXNwYWNlcyBibGFuY3MqKiAocXVpIG5lIHNvbnQgcGFzIHZpZGVzISksIGxlcyAqKnZhbGV1cnMgdmlkZXMqKiAoY2hhaW5lIGRlIGxvbmd1ZXVyIDApLCBldCBsZXMgKip2YWxldXJzICJudWxsIioqICh0eXBlIHNww6ljaWFsIHF1aSBuJ2VzdCBwYXMgdW5lIGNoYWluZSBkZSBjYXJhY3TDqHJlcykuIExlcyAqdmlkZXMqIGV0IGxlcyAqbnVsbCogc29udCBhdXNzaSBjb25zaWTDqXLDqXMgY29tbWUgKkJsYW5rKi4NCi0gUGx1c2lldXJzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIHNvdXMgYEZhY2V0dGVzYCBldCBgw4lkaXRlciBsZXMgY2VsbHVsZXNgIHBlcm1ldHRlbnQgZGUgZ8OpcmVyIGNlcyB0eXBlcyBkZSB2YWxldXJzLg0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipUcmFuc2Zvcm1lciB1bmUgY29sb25uZSBkYXRlIGRlIGZvcm1hdCBjYXJhY3TDqHJlIGVuIGZvcm1hdCBkYXRlKio6ICANCi0gRGFucyBsYSBjb2xvbm5lICpKb3VyIGNhbGVuZGFpcmUqOiBgTWVudSAtPiDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzIC0+IEVuIGRhdGVgICAgIA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQotIMOAIGwnaW1wb3J0YXRpb24gZCd1biBmaWNoaWVyLCBjaGFxdWUgY2VsbHVsZSBzZSB2ZXJyYSBhdHRyaWJ1ZXIgdW4gZm9ybWF0LiANCi0gUGFyIGTDqWZhdXQsIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGVzdCBkZSBmb3JtYXQgY2hhw65uZXMuICANCi0gTGUgY29udGVudSBkZXMgY2VsbHVsZXMgcmVjb25udSBjb21tZSBudW3DqXJpcXVlIGV0IGRhdGUgc2VyYSBkZSBjb3VsZXVyIHZlcnRlLiAgDQotIExlIGZvcm1hdCBwZXV0IMOqdHJlIG1vZGlmacOpIGRlIGRpZmbDqXJlbnRlcyBmYcOnb25zOiBCb3V0b24gYGVkaXRgLCBgVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlc2AsIEZlbsOqdHJlIEdSRUwuICANCi0gQ2UgZm9ybWF0IGF1cmEgdW4gaW1wYWN0IHN1ciBsZXMgYWN0aW9ucyBwb3NzaWJsZXMuICANCi0gTGUgY2hhbmdlbWVudCBkZSBmb3JtYXQgcGFyIMOpZGl0aW9uIGRpcmVjdGUgZCd1bmUgY2VsbHVsZSBlc3QgdW5lIG9ww6lyYXRpb24gZGlzdGluY3RlIGRlIGxhIHRyYW5zZm9ybWF0aW9uIGR1IGNvbnRlbnUuIExhIHByZW1pw6hyZSBvcMOpcmF0aW9uIGFycml2ZSBwYXJmb2lzIMOgIGNoYW5nZXIgZGVzIGZvcm1hdHMgcXVlIGxhIHRyYW5zZm9ybWF0aW9uIG5lIHBldXQgZmFpcmUuDQotIFBvdXIgcGx1cyBkJ2luZm9ybWF0aW9uIHN1ciBsZXMgZm9ybWF0cywgdm9pciBsYSBbZG9jdW1lbnRhdGlvbiBvZmZpY2llbGxlXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2V4cGxvcmluZykuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KIyMgNS4zLiBMYSBnZXN0aW9uIGRlcyBsaWduZXMgZXQgY29sb25uZXMNCg0KKipMYSBnZXN0aW9uIGRlcyBjb2xvbm5lcyBwZXV0IHNlIGZhaXJlOioqDQoNCi0gU3VyIGNoYXF1ZSBjb2xvbm5lOiANCiAgLSBGb25jdGlvbnMgc291cyBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IETDqXBsYWNlciAuLi4gLyBSZW5vbW1lciAvIFN1cHByaW1lcmAgICANCiAgLSBGb25jdGlvbnMgc291cyBgQXBlcsOndSAtPiBNYXNxdWVyLi4uIGAgICANCg0KPC9icj4NCg0KLSBTdXIgbGEgY29sb25uZSBgVG91dGVzYDogICAgIA0KICAtIGDDiWRpdGVyIGxlcyBjb2xvbm5lcyAtPiBSZXRyaWVyLXN1cHByaW1lciwgZ2VzdGlvbiBkZXMgdmFsZXVycyBjb25zw6ljdXRpdmVzYCAgICANCiAgLSBgQXBlcsOndSAtPiBBZmZpY2hlci1tYXNxdWVyYC4uLiAgDQoNCjwvYnI+DQoNCioqTGEgZ2VzdGlvbiBkZXMgbGlnbmVzOioqDQoNCi0gTGEgc8OpbGVjdGlvbiBkZSBsaWduZXMgcGV1dCBzZSBmYWlyZSBwYXIgbGUgYmlhaXMgZGUgZmlsdHJlcywgZmFjZXR0ZXMgZXQgYXV0cmVzIG1hbmlwdWxhdGlvbnMgcGVyc29ubmFsaXPDqWVzLiAgDQotIElsIGVzdCBhdXNzaSBwb3NzaWJsZSBkZSBtYXJxdWVyL8OpdG9pbGVyIGRlcyBsaWduZXMgZW4gbG90IG91IGluZGl2aWR1ZWxsZW1lbnQgcHVpcyBkZSBjcsOpZXIgdW5lIGZhY2V0dGUgc3VyIGxhIGNvbG9ubmUgYFRvdXRlc2AuICANCi0gT24gcGV1dCBlbnN1aXRlIHN1cHByaW1lciBsZXMgbGlnbmVzIGZpbHRyw6llczogYFRvdXRlcyAtPiDDiWRpdGVyIGxlcyBsaWduZXMgLT4gU3VwcHJpbWVyIGxlcyBsaWduZXMgY29ycmVzcG9uZGFudGVzYC4gIA0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipTdXBwcmltZXIgdW5lIGNvbG9ubmU6ICoqICANCi0gU3VyIGxhIGNvbG9ubmUgKlR5cGUgZCdpbmNpZGVudCogLT4gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBTdXBwcmltZXIgY2V0dGUgY29sb25uZWAuICANCg0KKipTdXBwcmltZXIgcGx1c2lldXJzIGNvbG9ubmVzOiAqKiAgDQotIFN1ciBsYSBjb2xvbm5lICpUb3V0ZXMqIC0+IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gw4lkaXRlci9TdXBwcmltZXIgbGVzIGNvbG9ubmVzYCAtPiAqS0ZTKiBldCAqQ0FUKi4gIA0KDQo8L2Rpdj4NCg0KKioqDQoNCjwvYnI+DQoNCiMjIDUuNC4gSGlzdG9yaXF1ZSAoVW5kby9SZWRvKQ0KDQotIFRvdXRlcyBsZXMgYWN0aW9ucyBzb250IGVucmVnaXN0csOpZXMgKGxvZyBkZSBzZXMgbWFuaXB1bGF0aW9ucykgZXQgcGV1dmVudCDDqnRyZSBhbm51bMOpZXMgZW4gcmVjdWxhbnQgw6l0YXBlIHBhciDDqXRhcGUgZGFucyBsJ2hpc3RvcmlxdWUuICANCi0gTGEgcHJlbWnDqHJlIGFjdGlvbiBkJ3VuIGhpc3RvcmlxdWUgZXN0IGxhIGNyw6lhdGlvbiBkdSBwcm9qZXQuICANCi0gUHVpc3F1ZSBsJ2hpc3RvcmlxdWUgZmFpdCBwYXJ0aWUgZHUgcHJvamV0IGVucmVnaXN0csOpIGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsLCBpbCBuZSBkaXNwYXJhaXQgcGFzIMOgIGxhIGZlcm1ldHVyZSBkZSBsYSBzZXNzaW9uLiANCi0gTCdoaXN0b3JpcXVlIHBldXQgw6p0cmUgZXh0cmFpdCBlbiBmb3JtYXQgSlNPTiwgY29waWVyL2NvbGxlciBkYW5zIG5vdGVwYWQgZXQgYXBwbGlxdWVyIGRlIG5vdXZlYXUuICANCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMTkuanBnKXt3aWR0aD02MCV9DQoNCjwvY2VudGVyPiAgDQoNCioqQXR0ZW50aW9uISoqDQoNCi0gU2kgb24gcmVjdWxlIGRhbnMgbGUgdGVtcHMgZXQgcXUnb24gZmFpdCB1bmUgbW9kaWZpY2F0aW9uLCBsZXMgw6l0YXBlcyBxdWkgc3VpdmVudCBkYW5zIGwnaGlzdG9yaXF1ZSBkaXNwYXJhaXNzZW50IHBvdXIgZGUgYm9uLiAgDQoNCi0gTGVzIG1hbmlwdWxhdGlvbnMgcmVsYXRpdmVzIMOgIGwnYWZmaWNoYWdlIG5lIHNvbnQgcGFzIGVucmVnaXN0csOpZXMgZGFucyBsJ2hpc3RvcmlxdWUsIHNldWxlbWVudCBsZXMgdHJhbnNmb3JtYXRpb25zLiBMJ2VucmVnaXN0cmVtZW50IGF1dG9tYXRpcXVlIG5lIGNvbXByZW5kIGRvbmMgcGFzIGxlcyBmYWNldHRlcyBldCBmaWx0cmVzICh2dWUgZGUgbCdpbnRlcmZhY2UpIC0gcGVyZCBjZSBxdWkgbidhcHBhcmFpdCBwYXMgZGFucyBsZSBgRMOpZmFpcmUvUmVmYWlyZWAuDQoNCi0gTCfDqWRpdGlvbiBkaXJlY3RlIGRhbnMgbGVzIGNlbGx1bGVzIGFwcGFyYWl0IGRhbnMgbCdoaXN0b3JpcXVlIG1haXMgbmUgcGV1dCDDqnRyZSBleHBvcnTDqWUuICANCg0KLSBGYWNldHRlcyBldCBmaWx0cmVzIHMnZW5yZWdpc3RyZW50IGdyw6JjZSBhdSBgcGVybWFsaWVuYC4gIA0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyA2LiBNZW51IGV0IGZvbmN0aW9ucyBkZSBiYXNlDQoNCk9wZW4gUmVmaW5lIHBlcm1ldCBkZSB0cmF2YWlsbGVyIGRlICoqZGV1eCBmYcOnb25zKio6ICANCg0KDQoxLiBBdmVjIGwnZW5zZW1ibGUgZGVzICoqZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMqKiBxdWUgbCdvbiByZXRyb3V2ZSBkYW5zIGxlcyBtZW51cy4NCg0KDQoyLiBBdmVjIGxlICoqbGFuZ2FnZSBHUkVMKiogcGVybWV0dGFudCBkZSByw6lkaWdlciBzZXMgcHJvcHJlcyBbZXhwcmVzc2lvbnMuXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2V4cHJlc3Npb25zKS4gIA0KDQotIE3Dqm1lIGxvcnNxdWUgbCdvbiB1dGlsaXNlIGxlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llcywgaWwgZXN0IHBvc3NpYmxlIGQnZW4gbW9kaWZpZXIgbGUgZm9uY3Rpb25uZW1lbnQgZW4gw6lkaXRhbnQgZGlyZWN0ZW1lbnQgbGEgc3ludGF4ZSBHUkVMIGNvcnJlc3BvbmRhbnRlLiANCg0KPC9icj4NCg0KIyMgNi4xLiBGb25jdGlvbnMgYXV0b21hdGlzw6llczoNCg0KLSBMZSBtZW51IGV0IGwnZW5zZW1ibGUgZGUgc2VzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIGFwcGFyYWlzc2VudCBlbiBjbGlxdWFudCBzdXIgbGEgZmzDqGNoZSBkZSBsJ2ludGl0dWzDqSBkZSBjaGFxdWUgY29sb25uZS4NCg0KLSBMZXMgZm9uY3Rpb25zIGRpc3BvbmlibGVzIHNvdXMgbGUgbWVudSBkZSBsYSBwcmVtacOocmUgY29sb25uZSBgVG91dGVzYCBzZSBkaXN0aW5ndWVudCBkZXMgYXV0cmVzIHB1aXNxdSdlbGxlcyBwZXJtZXR0ZW50IGQnYXBwbGlxdWVyIGRlcyBmb25jdGlvbnMgw6AgbCdlbnNlbWJsZSBkZXMgY29sb25uZXMgZHUgZmljaGllcjogTWFycXVlciwgw6l0b2lsZXIsIHN1cHByaW1lciwgbWFzcXVlci4uLg0KDQo8L2JyPg0KDQojIyMjIE1lbnUgZXQgZm9uY3Rpb25zIGRlIGxhIGNvbG9ubmUgYFRvdXRlc2ANCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjIxLmpwZyl7d2lkdGg9OTAlfQ0KDQo8L2JyPg0KDQojIyMjIE1lbnUgZXQgZm9uY3Rpb25zIGRlIGNoYXF1ZSBjb2xvbm5lLXZhcmlhYmxlDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IxMi5qcGcpe3dpZHRoPTkwJX0NCg0KPC9icj4NCg0KKioqDQoNCiMjIDYuMi4gTGUgbGFuZ2FnZSBHUkVMDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IxNC5qcGcpDQoNCjwvYnI+DQoNCkdSRUwgLSBFeHByZXNzaW9ucyBzaW1pbGFpcmVzIGF1eCBmb3JtdWxlcyBleGNlbCBtYWlzIHF1aSBzJ2FwcGxpcXVlbnQgYXV4IGNvbG9ubmVzLCBub24gYXV4IGNlbGx1bGVzLCBldCBxdWkgbmUgc29udCBwYXMgc3RvY2vDqWVzIMOgIG3Dqm1lIGxlcyBkb25uw6llcyBtYWlzIGRhbnMgdW4gc2NyaXB0LiAgDQoNCjwvYnI+DQoNCiMjIyBMZSBsYW5nYWdlIEdSRUwgcGV1dCBzJ3V0aWxpc2VyIGRlIGRpZmbDqXJlbnRlcyBmYcOnb25zOiAgDQoNCi0gRW4gY3LDqWFudCBkZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIDogYEZhY2V0dGUgLT4gRmFjZXR0ZSB0ZXh0dWVsbGUgcGVyc29ubmFsaXPDqWVgLiAgDQoNCi0gRW4gdHJhbnNmb3JtYW50IHVuZSBjb2xvbm5lOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gdHJhbnNmb3JtZXJgIChhdXNzaSBzb3VzIGBUb3V0ZXMgLT4gVHJhbnNmb3JtZXJgKS4gIA0KDQotIEVuIGNyw6lhbnQgdW5lIG5vdXZlbGxlIGNvbG9ubmU6IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBiYXPDqWUgc3VyIGNldHRlIGNvbG9ubmVgLiAgDQoNCjwvYnI+DQoNCioqTGVzIGZpbHRyZXMgZXQgbGVzIHRyYW5zZm9ybWF0aW9ucyBwbHVzIGNvbXBsZXhlcyBwZXV2ZW50IGF1c3NpIG7DqWNlc3NpdGVyIGwndXNhZ2UgZCdbZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIChyZWdleCldKGh0dHBzOi8vcmVnZXgxMDEuY29tLykqKg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgNi4zLiBUcmllciB1biBmaWNoaWVyDQoNCi0gTGVzIGRvbm7DqWVzIGFwcGFyYWlzc2VudCBkYW5zIGwnb3JkcmUgZHUgZmljaGllciBvcmlnaW5hbC4NCi0gUG91ciBtb2RpZmllciBsJ29yZHJlIGQnYXBwYXJpdGlvbiBkZXMgb2JzZXJ2YXRpb25zLCBhcHBsaXF1ZXIgdW4gb3UgZGVzIHRyaXMgc3VyIGxlcyBjb2xvbm5lcyBhdmVjIGBUcmllci4uLmANCi0gUG91ciBjb21iaW5lciBwbHVzaWV1cnMgdHJpcyBzdXIgZGlmZsOpcmVudGVzIGNvbG9ubmVzOiBGYWlyZSB1biB0cmllIHN1ciB1bmUgY29sb25uZSBwdWlzIHN1ciB1bmUgYXV0cmUgZW4gbW9kaWZpYW50IHNpIG7DqWNlc3NhaXJlIGwnb3B0aW9uIGBUcmllciBzZWxvbiBjZXR0ZSBzZXVsZSBjb2xvbm5lYC4NCi0gTGVzIHRyaXMgbmUgc29udCBxdWUgdGVtcG9yYWlyZXMgZXQgbidhZmZlY3RlbnQgZG9uYyBxdWUgbCdhZmZpY2hhZ2UuIFBvdXIgcXUnaWxzIHNvaWVudCBwZXJtYW5lbnRzIChyZW51bcOpcm90YXRpb24gZGVzIGxpZ25lcyk6IGBUcmllciAtPiBSZXRyaWVyIGxlcyBsaWduZXMgZGUgZmHDp29uIHBlcm1hbmVudGVgKi4gIA0KLSBJbCBlc3QgcG9zc2libGUgZGUgc3VwcHJpbWVyIGV0IGQnaW52ZXJzZXIgbGUgdHJpIMOgIHBhcnRpciBkZXMgb3B0aW9ucyBzdXIgY2hhcXVlIGNvbG9ubmUgb3UgZ3LDomNlIMOgIGxhIGZvbmN0aW9uIGBUcmllcmAgZHUgaGF1dC4gIA0KDQogKkxlIHRyaSBwZXJtYW5lbnQgYWZmZWN0ZSB0b3V0IGxlIGZpY2hpZXIsIHBhcyBzZXVsZW1lbnQgbGEgdnVlIGZpbHRyw6llLiAgDQoNCiFbXShpbWFnZXMvT1I2LmpwZykgDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIFRyaWVyIGxlcyB2YWxldXJzIGRlIGxhIGNvbG9ubmUgYEpvdXIgY2FsZW5kYWlyZWAgZW4gYGRhdGUgYW50w6ljaHJvbm9sb2dpcXVlYC4gIA0KLSBRdWVsbGUgZXN0IGxhIGRlcm5pw6hyZSBkYXRlIGQnaW5jaWRlbnQgZW5yZWdpc3Ryw6llIGRhbnMgbGUgZmljaGllciA/ICANCi0gU3VwcHJpbWVyIGxlIHRyaS4gIA0KPC9kaXY+DQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBUcmllciBsZXMgdmFsZXVycyBkZSBsYSBjb2xvbm5lIGBNb2lzIENhbGVuZHJpZXJgICANCi0gVHJpZXIgbGVzIHZhbGV1cnMgZGUgbGEgY29sb25uZSBgSm91ciBkdSBtb2lzYCAgDQotIEV4cGxvcmVyIGxlIHLDqXN1bHRhdC4uLiANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgNi40LiBGaWx0cmVyIGxlIHRleHRlDQoNCi0gTGEgZm9uY3Rpb24gYEZpbHRyZXIgbGUgdGV4dGVgIHBlcm1ldCBkZSBjaGVyY2hlciB1bmUgb3UgZGVzIGNoYWluZXMgZGUgY2FyYWN0w6hyZXMgZGFucyB1bmUgb3UgcGx1c2lldXJzIHZhcmlhYmxlcy4gIA0KLSBQZXJtZXQgZGUgcmVjaGVyY2hlciBkZXMgY2hhaW5lcyBkZSBjYXJhY3TDqHJlcyBkYW5zIHVuZSBjb2xvbm5lIGV0IGRlIGNvbWJpbmVyIGRlcyBmaWx0cmVzIGFwcGxpcXXDqXMgc3VyIHBsdXNpZXVycyBjb2xvbm5lcyBwb3VyIHJhZmZpbmVyIGxhIHJlY2hlcmNoZS4gIA0KLSBGb25jdGlvbiBwbHVzIGV4cMOpZGl0aXZlIHF1ZSBsZXMgZmFjZXR0ZXMgcXVhbmQgb24gbmUgdmV1dCBxdWUgY2hlcmNoZXIgdW5lIGNoYWluZSBkZSBjYXJhY3TDqHJlcy4gIA0KLSBMJ2FmZmljaGFnZSBkZXMgbGlnbmVzIHNlIGxpbWl0ZXJhIGF1IG5vbWJyZSBkZSBjYXMgY29ycmVzcG9uZGFudHMgYXV4IGNyaXTDqHJlcyBkZSByZWNoZXJjaGUgaW5zY3JpdHMgZGFucyBsZXMgYm9pdGVzIGRlIGZpbHRyZXMuICANCi0gKipUYW50IHF1ZSBsZXMgZmlsdHJlcyBzZXJvbnQgYWN0aWZzLCBsZXMgYWN0aW9ucyBzdWJzw6lxdWVudGVzIHNlIGxpbWl0ZXJvbnQgw6AgY2VzIGNhcyBmaWx0csOpcy4qKiAgDQoNCiFbXShpbWFnZXMvT1I3LmpwZykgDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIEZpbHRyZXIgbGUgdGV4dGUgc3VyIGxhIGNvbG9ubmUgKkNvZGUgZGUgbGlldSo6ICJiZXJyaSIgIA0KLSBGaWx0cmVyIGxlIHRleHRlIHN1ciBsYSBjb2xvbm5lICpIZXVyZSBkZSBsJ2luY2lkZW50KjogIjEyIiAgDQotIEV4cGxvcmVyIGxlcyByw6lzdWx0YXRzICANCi0gQ29tbWVudCBzJ2Fzc3VyZXIgZCdhdm9pciBzZXVsZW1lbnQgbGVzIGNhcyBzdXJ2ZW51cyBlbnRyZSAxMmggZXQgMTNoPyBDb21iaWVuIGRlIGxpZ25lcyBjb3JyZXNwb25kZW50IMOgIGNlcyBjb25kaXRpb25zPyANCi0gVG91dCBzdXBwcmltZXIgbGVzIGZpbHRyZXMuDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMgNy4gTGVzIGZhY2V0dGVzDQoNCjxkaXYgY2xhc3MgPSAicmlnaHQiPg0KPGltZyBzcmM9ImltYWdlcy9PUjM0LmpwZyIgIHdpZHRoPSI2MCUiIC8+DQo8L2Rpdj4NCg0KLSBMZXMgZmFjZXR0ZXMgY29uc3RpdHVlbnQgbGEgbWFycXVlIGRlIGNvbW1lcmNlIGQnT3BlblJlZmluZSwgZCdvw7kgbGUgbG9nbyEgDQoNCi0gRm9uY3Rpb25uYWxpdMOpIHB1aXNzYW50ZSBxdWkgcGVybWV0IGQnZXhwbG9yZXIgZXQgZGUgZmlsdHJlciBzZXMgZG9ubsOpZXMgZW4gZm9uY3Rpb24gZGUgZGlmZsOpcmVudGVzIGNvbmRpdGlvbnMuICANCg0KLSBOJ2FmZmVjdGVudCBwYXMgZGlyZWN0ZW1lbnQgbGVzIGRvbm7DqWVzLCBzZXVsZW1lbnQgbGEgcHLDqXNlbnRhdGlvbi4gIA0KDQotIMOAIGxhIGJhc2UsIHVuZSBmYWNldHRlIGNvcnJlc3BvbmQgw6AgbGEgbGlzdGUgZGVzIHZhbGV1cnMgcG9zc2libGVzIGQndW5lIHZhcmlhYmxlICAoZXQgZGUgbGV1ciBvY2N1cnJlbmNlKSBwcsOpc2VudMOpZSBzZWxvbiBsZSBmb3JtYXQgKGNoYWluZSwgbnVtw6lyaXF1ZSwgZGF0ZSkuICANCg0KLSBQZXJtZXR0ZW50IHVuZSBleHBsb3JhdGlvbiBldCBtYW5pcHVsYXRpb24gZGVzIHZhbGV1cnMgcG9zc2libGVzIGV0IGRlIGxldXJzIGNhcyBjb3JyZXNwb25kYW50cyBwbHVzIMOpbGFib3LDqWVzIHF1ZSBsZXMgZmlsdHJlcy4gIA0KDQotIE9uIHBldXQgYWluc2kgaWRlbnRpZmllciBsZXMgdGVuZGFuY2VzLCBsZXMgcsOpZ3VsYXJpdMOpcywgbGVzIGVycmV1cnMsIGxlcyDDqWNhcnRzLCBsZXMgcsOpcMOpdGl0aW9ucyBldCAgY2libGVyIGxlcyB2YWxldXJzIGRlIHNvdXMtZ3JvdXBlcyBwcsOpY2lzLiAgDQoNCi0gQ2VzIHNvdXMtZ3JvdXBlcyBwZXV2ZW50IGVuc3VpdGUgw6p0cmUgw6lkaXTDqXMgZXQgZXhwb3J0w6lzIChib3V0b24gYEV4cG9ydGVyYCBlbiBoYXV0IMOgIGRyb2l0ZSkuIA0KDQo8L2JyPg0KDQojIyMgRGV1eCB0eXBlcyBkZSBmYWNldHRlczoNCg0KICAtIFsxXSBMZXMgZmFjZXR0ZXMgYXV0b21hdGlzw6llcy4gDQogIDwvYnI+DQogIC0gWzJdIExlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMuDQogIDwvYnI+DQogIC0gWzNdIElsIGVzdCBhdXNzaSBwb3NzaWJsZSBkZSBjcsOpZXIgc2VzIHByb3ByZXMgZmFjZXR0ZXMgZ3LDomNlIGF1IGxhbmdhZ2UgR1JFTCBwb3VyIGTDqWZpbmlyIGRlcyBjb25kaXRpb25zIGRlIHPDqWxlY3Rpb24vZmlsdHJlIHRyw6hzIHByw6ljaXNlcyAob24gcGFybGUgZW5jb3JlIGljaSBkZSBgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzYCwgbWFpcyBlbGxlcyBkb2l2ZW50IMOqdHJlIHLDqWRpZ8OpZXMgbWFudWVsbGVtZW50KS4NCg0KPC9icj4NCg0KIyMjIFRyb2lzIGZvcm1hdHMgZGUgZmFjZXR0ZXM6DQoNCk9uIHJldHJvdXZlIMOpZ2FsZW1lbnQgZGlmZsOpcmVudHMgKipmb3JtYXRzIGRlIGZhY2V0dGVzKiogLT4gdW5lIHBvdXIgY2hhcXVlIGZvcm1hdCBkZSBkb25uw6llcyAgDQoNCjEuIGBGYWNldHRlIHRleHR1ZWxsZWAgWzQtNV0gIA0KDQoyLiBgRmFjZXR0ZSBudW3DqXJpcXVlYCAgWzddICANCg0KMy4gYEZhY2V0dGUgY2hyb25vbG9naXF1ZWAgWzZdICANCg0KLSBMZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIHByb3Bvc2VudCBhdXNzaSBkZXMgZmFjZXR0ZXMgYm9vbMOpZW5uZXMuICANCg0KPC9icj4NCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMjMuanBnKQ0KPC9jZW50ZXI+ICANCg0KLSAqKls4XSoqIExlIGxpZW4gYGNoYW5nZXJgIHBlcm1ldCBkJ291dnJpciB1bmUgZmVuw6p0cmUgZCfDqWRpdGlvbiBHUkVMIHBvdXIgbW9kaWZpZXIgbGEgc3ludGF4ZSBkZSBsYSBmYWNldHRlLiAgDQotICoqWzldKiogUG91ciBzdXBwcmltZXIgbGVzIGZhY2V0dGVzLCBjbGlxdWVyIHN1ciBsZSB4IGRlIGNoYXF1ZSBmZW7DqnRyZSBvdSBgVG91dCBzdXBwcmltZXJgLiAgDQotIFBvdXIgY29uc2VydmVyIGxlcyBmZW7DqnRyZXMgbWFpcyBzdXBwcmltZXIgbGVzIHPDqWxlY3Rpb25zIHF1aSB5IG9udCDDqXTDqSBmYWl0ZXMsIGNsaXF1ZXIgc3VyIGByw6lpbnRpYWxpc2VyYCBzdXIgY2hhcXVlIGZlbsOqdHJlIG91IGBUb3V0IHLDqWluaXRpYWxpc2VyYCAqKls5XSoqLiAgDQotICoqWzEwXSoqIE9wdGlvbiBgR3JvdXBlYDogT3V0aWxzIHByb3Bvc2FudCBkaWZmw6lyZW50cyBhbGdvcml0aG1lcyBkZSBzaW1pbGFyaXTDqSBwZXJtZXR0YW50IGRlIHJlZ3JvdXBlciBkZXMgY2F0w6lnb3JpZXMgc2VtYmxhYmxlcy4gIA0KDQo8L2JyPg0KDQojIyMjIDEuIEZhY2V0dGUgdGV4dHVlbGxlIFs0LTVdIA0KDQotIFR5cGUgZGUgZmFjZXR0ZSBsZSBwbHVzIHNvdXZlbnQgdXRpbGlzw6kuICANCg0KLSBSZWdyb3VwZW50IGRhbnMgbGEgZmVuw6p0cmUgZGUgZ2F1Y2hlIGxlcyB2YWxldXJzIGRpc3RpbmN0ZXMgKHRleHR1ZWxsZXMgb3UgbnVtw6lyaXF1ZXMpIGRlcyBjb2xvbm5lcyB2b3VsdWVzLiAgDQogIC0gT24gcGV1dCBmYWlyZSB1bmUgZmFjZXR0ZSB0ZXh0dWVsbGUgc3VyIHVuZSBjb2xvbm5lIG51bcOpcmlxdWUgbWFpcyBwYXMgbCdpbnZlcnNlLiAgDQogIC0gMjAwMCB2YWxldXJzIG1heGltdW0gcGFyIGTDqWZhdXQgbWFpcyBwZXV0IMOqdHJlIG1vZGlmacOpIGRhbnMgbGVzIHByw6lmw6lyZW5jZXMuIFNpIGxlcyB2YWxldXJzIHNvbnQgdHJvcCBub21icmV1c2VzLCBlbGxlcyBuZSBzZXJvbnQgcGFzIGxpc3TDqWVzICh1biBmaWx0cmUgcG91cnJhaXQgw6p0cmUgdXRpbGlzw6kpLiANCiAgDQotIFBlcm1ldHRlbnQgZGUgY29tYmluZXIgZGlmZsOpcmVudHMgZmlsdHJlcyBlbiBzw6lsZWN0aW9ubmFudCBkaWZmw6lyZW50ZXMgdmFsZXVycyBkJ3VuZSBvdSBwbHVzaWV1cnMgdmFyaWFibGVzIChldCBsZXVycyBjYXMgY29ycmVzcG9uZGFudHMpLiAgDQogIC0gQ2xpcXVlciBgaW5jbHVyZWAgb3UgYGV4Y2x1cmVgIHBvdXIgc8OpbGVjdGlvbm5lciBvdSBzdXBwcmltZXIgZGVzIGNob2l4IG11bHRpcGxlcyAqKlsxMl0qKi4gIA0KICAtIFVuZSBmb2lzIGxhIHPDqWxlY3Rpb24gZmFpdGUsIGwnb3B0aW9uIGBpbnZlcnNlcmAgcGVybWV0IGRlIHPDqWxlY3Rpb25uZXIgdG91dCBTQVVGIGxhIHPDqWxlY3Rpb24gKipbMTFdKiouICANCiAgLSBQZXV2ZW50IMOqdHJlIHRyacOpZXMgc2Vsb24gbGUgbm9tIG91IGxlIGNvbXB0ZSAobm9tYnJlIGQnb2NjdXJyZW5jZSkuICANCi0gUGVybWV0dGVudCAqKmTigJnDqWRpdGVyIGxlcyB2YWxldXJzKiogKGNvbnRlbnUgZGUgY2hhcXVlIGNlbGx1bGUgY29ycmVzcG9uZGFudGUpICoqWzEzXSoqLiAgDQoNCjwvYnI+DQoNCiMjIyMgMi4gRmFjZXR0ZSBudW3DqXJpcXVlIFs3XQ0KDQotIFZpc3VhbGlzZXIgZXQgc8OpbGVjdGlvbm5lciBsZXMgdmFsZXVycyBk4oCZdW5lIHZhcmlhYmxlIG51bcOpcmlxdWUgYWxsYW50IGRlIGxhIHBsdXMgcGV0aXRlIMOgIGxhIHBsdXMgZ3JhbmRlLiAgDQoNCjwvYnI+DQoNCiMjIyMgMy4gRmFjZXR0ZSBjaHJvbm9sb2dpcXVlIFs2XQ0KDQotIFZpc3VhbGlzZXIgZXQgc8OpbGVjdGlvbm5lciBsZXMgdmFsZXVycyBk4oCZdW5lIGNvbG9ubmUgZGF0ZSBlbiBsaWduZSBkdSB0ZW1wcy4gIA0KDQoNCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KKipGaWx0cmVyKiogDQoNCi0gRXhwbG9yZXIgbGVzIHZhbGV1cnMgZGUgbGEgdmFyaWFibGUgKkNhdXNlIHByaW1haXJlKi4gUXVlbGxlIGVzdCBsYSBkZXV4acOobWUgcGx1cyBmcsOpcXVlbnRlPyANCi0gUXVlbGxlcyBzb250IGxlcyBjYXTDqWdvcmllcyBkZSAqQ2F1c2Ugc2Vjb25kYWlyZSogcmVsacOpZXMgw6AgbGEgKkNhdXNlIHByaW1haXJlICJDbGllbnTDqGxlIio/ICAgDQotIFF1ZWxsZSBlc3QgbGEgcGx1cyBmcsOpcXVlbnRlPyBTw6lsZWN0aW9ubmVyIGNldHRlIHZhbGV1ci4gQ29tYmllbiBkZSBjYXMgY29ycmVzcG9uZGVudCDDoCBjZXR0ZSBzw6lsZWN0aW9uPyAgDQotIMOAIHF1ZWwgKmpvdXIgZGUgbGEgc2VtYWluZSogY2V0dGUgY2F1c2UgZXN0LWVsbGUgc3VydmVudWUgbGUgcGx1cyBzb3V2ZW50PyAgDQotIFLDqWluaXRpYWxpc2VyIHRvdXRlcyBsZXMgZmFjZXR0ZXMuDQoNCioqw4lkaXRlcioqICANCg0KLSBEYW5zIGxhIGZhY2V0dGUgKkNhdXNlIHByaW1haXJlKiwgcmVub21tZXIgbGEgdmFsZXVyICNORCAtPiBOQS4gIA0KLSBDb3JyaWdlciBsYSB2YWxldXIgImF1dHJlIiBwb3VyIHF1J2VsbGUgc29pdCBmdXNpb25uw6llIMOgIGxhIHZhbGV1ciAiQXV0cmVzIi4gIA0KLSBTdXBwcmltZXIgdG91dGVzIGxlcyBmYWNldHRlcy4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKkZpbHRyZXIqKiANCg0KLSBRdWVsIGVzdCBsZSAqc3ltcHRvbWUqIGxlIHBsdXMgZnLDqXF1ZW50PyBTw6lsZWN0aW9ubmVyIGNldHRlIHZhbGV1ci4gIA0KLSBTdXIgcXVlbGxlICpMaWduZSogY2UgKnN5bXB0b21lKiBzJ2VzdCBwcm9kdWl0IGxlIHBsdXMgc291dmVudD8gU8OpbGVjdGlvbm5lciBjZXR0ZSB2YWxldXIuICANCi0gQ2VzIMOpdsOpbmVtZW50cyBvbnQtaWxzIG7DqWNlc3NpdMOpIHVuZSAqw6l2YWN1YXRpb24qPyAgDQoNCioqw4lkaXRlcioqICANCi0gw4lkaXRlciBsYSB2YXJpYWJsZSAqw6l2YWN1YXRpb24qIGRlIGZhw6dvbiDDoCBjZSBxdSdpbCBuJ3kgYWl0IHF1ZSAqKmRldXggdmFsZXVycyoqIHBvc3NpYmxlczogT3VpIGV0IE5vbi4gIA0KPC9kaXY+DQoNCioqKg0KDQo8L2JyPg0KDQojIDguIExlcyByZWdyb3VwZW1lbnRzIChjbHVzdGVyaW5nKQ0KDQotIEZvbmN0aW9uIHF1aSBwZXJtZXQgZCdpZGVudGlmaWVyIGRhbnMgdW5lIGNvbG9ubmUgbGVzIHZhbGV1cnMgZGlzdGluY3RlcyBxdWkgcG91cnJhaWVudCBhdm9pciBsYSBtw6ptZSBzaWduaWZpY2F0aW9uIG91IHF1aSBwb3VycmFpZW50IMOqdHJlIHJlZ3JvdXDDqWVzIGRhbnMgdW5lIG3Dqm1lIGNhdMOpZ29yaWUgPSAidmFyaWF0aW9ucyBzdXIgbGUgbcOqbWUgdGjDqG1lIiDDqXZhbHXDqWVzIGVuIGZvbmN0aW9uIGRlIFtkaWZmw6lyZW50cyBhbGdvcml0aG1lc10oaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL0NsdXN0ZXJpbmctSW4tRGVwdGgpLiANCg0KLSBjaGFxdWUgc3VnZ2VzdGlvbiBkb2l0IMOqdHJlIGFwcHJvdXbDqWUgaW5kaXZpZHVlbGxlbWVudCBwb3VyIHF1ZSBsZXMgbW9kaWZpY2F0aW9ucyBzJ2FwcGxpcXVlbnQgKGxlcyByZWdyb3VwZW1lbnRzIHByb3Bvc8OpcyBuZSBzb250IHBhcyBuw6ljZXNzYWlyZW1lbnQgcGVydGluZW50cykuDQoNCi0gT3BlblJlZmluZSBwcm9wb3NlIGRlcyAqY2x1c3RlcnMqIHNlbG9uIGRpZmbDqXJlbnRlcyBtw6l0aG9kZXMgcGx1cyBvdSBtb2lucyDDqWxhYm9yw6llcyAoKlByb2NoZSB2b2lzaW4qIHByZW5kIHBsdXMgZGUgbcOpbW9pcmUpIHF1aSBwZXJtZXR0ZW50IGRlIHJlZ3JvdXBlciBsZXMgdmFsZXVycyBzaW1pbGFpcmVzIGV0IHByb3Bvc2VudCBkZXMgbWF0Y2hzIHBvc3NpYmxlcyAoKmZ1enp5IG1hdGNoaW5nKik6IHBhciBleGVtcGxlICplbXByZWludGUqIGVzdCBwbHVzIGNvbnNlcnZhdGV1ciAoZGlzdGluZ3VlIGNhc3NlLCBlc3BhY2VzLCBvcmRyZSwgcsOpcMOpdGl0aW9uLCBwb25jdHVhdGlvbi4uLiksICpuZ3JhbSogZXN0IHBsdXMgZmxleGlibGUgKG3Dqm1lcyBjYXJhY3TDqHJlcyksICpNZXRhcGhvbmUzKiBlc3QgbGUgcGx1cyAibGliw6lyYWwiIChtw6ptZSBwcm9ub25jaWF0aW9uKS4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQ3LDqWVyIHVuZSBmYWNldHRlIHRleHR1ZWxsZSBzdXIgbGEgY29sb25uZSAqQ29kZSBkZSBsaWV1Ki4gIA0KLSBDbGlxdWVyIHN1ciBgR3JvdXBlYCBldCBleHBsb3JlciBsZXMgcmVncm91cGVtZW50cyBlbiBmb25jdGlvbiBkZXMgZGlmZsOpcmVudHMgYWxnb3JpdGhtZXMuICANCjwvZGl2Pg0KDQoqKioNCg0KPC9icj4NCg0KIyA5LiBHUkVMIGV0IGxlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgDQoNCg0KLSBGb25jdGlvbm5lbnQgY29tbWUgZGVzIGZhY2V0dGVzIGF1dG9tYXRpc8OpZXMgc2F1ZiBxdSdvbiBuZSBwZXV0IMOpZGl0ZXIgZW4gZm9uY3Rpb24gZGUgY2VzIHLDqXN1bHRhdHMgY2FyIGVsbGVzIHByw6lzZW50ZW50IGRlcyBkb25uw6llcyBtb2RpZmnDqWVzIGVuIG3DqW1vaXJlLg0KDQotIE9udCDDqXTDqSBkw6l2ZWxvcHDDqWVzIGV0IGF1dG9tYXRpc8OpZXMgYWZpbiBkJ2V4cGxvcmVyIGRlcyBhc3BlY3RzIHByw6ljaXMgZGVzIGRvbm7DqWVzIHNhbnMgYXZvaXIgw6AgbGVzICByw6lkaWdlciBlbiBzeW50YXhlIEdSRUw6IA0KDQogIC0gYEZhY2V0dGUgcGFyIG1vdGAgOiBEaXZpc2UgY2hhcXVlIG1vdCAoc8OpcGFyw6kgZCd1biBlc3BhY2UpIGQndW5lIGNvbG9ubmUgZXQgbGVzIHByw6lzZW50ZSBlbiBsaXN0ZSBkZSB2YWxldXJzIGRpc3RpbmN0ZXMgW3ZhbHVlLnNwbGl0KCIgIildLg0KICANCiAgLSBgRmFjZXR0ZSBkb3VibG9uc2A6IHZhbGV1cnMgYm9vbMOpZW5uZXMgaW5kaXF1YW50IHNpIGxlcyB2YWxldXJzIHNvbnQgdW5pcXVlcyAoZmFsc2UpIG91IG5vbiAodHJ1ZSkgW2ZhY2V0Q291bnQodmFsdWUsICd2YWx1ZScsICdTeW1wdG9tZScpID4gMV0uICANCiAgDQogIC0gYEZhY2V0dGVzIGxvZ2FyaXRobWlxdWVzYDogbW9kaWZpY2F0aW9uIGxvZ2FyaXRobWlxdWUgZGUgdmFsZXVycyBudW3DqXJpcXVlcyBbdmFsdWUubG9nKCldLg0KICANCiAgLSBgRmFjZXR0ZSBsb25ndWV1ciBkZSB0ZXh0ZWA6IGxpc3RlIGxlIG5vbWJyZSBkZSBjYXJhY3TDqHJlcyBkdSBjb250ZW51IGRlcyBjZWxsdWxlcyBkJ3VuZSBjb2xvbm5lIFt2YWx1ZS5sZW5ndGgoKV0uDQogIA0KICAtIEZhY2V0dGVzIHBlcm1ldHRhbnQgZCdleHBsb3JlciBsZXMgdmFsZXVycyBkJ2BlcnJldXJgLCBgbnVsbGVzYCwgYHZpZGVzYC4uLiBbaXNFbXB0eVN0cmluZyh2YWx1ZSldDQoNCioqKiANCg0KPC9icj4NCg0KIyMjIEdSRUwgLSBwcmluY2lwZXMgZGUgYmFzZSAgDQoNCi0gKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSogDQotIExhbmdhZ2Ugc2ltaWxhaXJlIMOgIGphdmFzY3JpcHQgZXQgZm9ybXVsZXMgZXhjZWwuICAgIA0KLSBQZXJtZXQgbGEgcsOpZGFjdGlvbiBkJ2V4cHJlc3Npb25zIHZpc2FudCDDoCBtYW5pcHVsZXIvdHJhbnNmb3JtZXIgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZCd1bmUgY29sb25uZS4gIA0KKFZvaXIgbGEgW2RvY3VtZW50YXRpb24gb2ZmaWNpZWxsZV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ncmVsKSBwb3VyIHBsdXMgZGUgZMOpdGFpbHMpICANCi0gTGFuZ2FnZSBjb21wb3PDqSBkZSBbZm9uY3Rpb25zXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2dyZWxmdW5jdGlvbnMpIGV0IGQnW29iamV0c10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHByZXNzaW9ucyN2YXJpYWJsZXMpLg0KDQo8L2JyPg0KDQojIyMjIFV0aWxpc2UgdW5lIHN5bnRheGUgcGFydGljdWxpw6hyZSBwb3VyIGNpYmxlciBsZXMgb2JqZXRzICh2YXJpYWJsZXMpOiAgDQotIENvbnRlbnUgZGUgY29sb25uZSBhY3R1ZWxsZTogYHZhbHVlYC4gICAgIA0KLSBDb250ZW51IGQndW5lIGF1dHJlIGNvbG9ubmU6IGBjZWxsc1snbm9tLWNvbG9ubmUnXS52YWx1ZWAuICAgIA0KLSBDb250ZW51IHRleHR1ZWw6ICJndWlsbGVtZXQgc2ltcGxlIG91IGRvdWJsZSIuICAgIA0KDQo8L2JyPg0KDQojIyMjIERldXggZm9ybWF0cyBkZSBub3RhdGlvbjogIA0KLSBJbWJyaXF1w6llOiAodHJpbSh0b0xvd2VyY2FzZSh2YWx1ZSkpLiAgICANCi0gKipTw6lxdWVudGllbGxlKio6IHZhbHVlLnRvTG93ZXJjYXNlKCkudHJpbSgpIChwbHVzIGZhY2lsZSDDoCBsaXJlKS4gICAgDQoNCjwvYnI+DQoNCiMjIyMgRGlmZsOpcmVudHMgdHlwZXMgZGUgZm9uY3Rpb25zOiAgDQotIExlcyBmb25jdGlvbnMgZXQgbGV1ciBjb21wb3J0ZW1lbnQgZMOpcGVuZHJvbnQgZHUgdHlwZSBkZSBkb25uw6llcyBtYW5pcHVsw6llcy4gIA0KLSBbQ2VydGFpbmVzIGZvbmN0aW9uc10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ncmVsZnVuY3Rpb25zI3NsaWNlYS1uLWZyb20tbi10by1vcHRpb25hbCkgcGVybWV0dGVudCBkZSB0cmFuc2Zvcm1lciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIGVuIGBhcnJheXNgIChsaXN0ZSBkJ8OpbMOpbWVudHMpIGV0IGRlIGxlcyBtYW5pcHVsZXIuICANCi0gW0NlcnRhaW5lcyBmb25jdGlvbnNdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwcmVzc2lvbnMjcmVndWxhci1leHByZXNzaW9ucykgcGVybWV0dGVudCBkJ3V0aWxpc2VyIGxlcyBbZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzXSgjZXhwcmVzc2lvbikuICANCg0KPC9icj4NCg0KU2Vsb24gbGUgZm9ybWF0LCBkaWZmw6lyZW50cyB0eXBlcyBkJyoqb3DDqXJhdGV1cnMqKiBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpcyBlbnRyZSBsZXMgdmFsZXVyczogIA0KCS0gT3DDqXJhdGV1cnMgYXJpdGhtw6l0aXF1ZXM6ICssIC0sICosIC8gIA0KCS0gT3DDqXJhdGV1cnMgYm9vbMOpZW5zOiA9PSwgPiwgPCAgDQogIA0KUGFyIGV4ZW1wbGU6DQoNCi0gTGUgIisiIGVudHJlIGRldXggY29udGVudXMgbnVtw6lyaXF1ZXMgPSBzb21tZQ0KDQohW10oaW1hZ2VzL09SMzAuanBnKQ0KDQotIExlICIrIiBhdmVjIHVuIGNvbnRlbnUgdGV4dHVlbCA9IGNvbmNhdMOpbmF0aW9uDQoNCiFbXShpbWFnZXMvT1IzMS5qcGcpDQoNCjwvYnI+DQoNCi0gQ2hhcXVlIGNhcmFjdMOocmUgY29tcG9zYW50IHVuZSB2YWxldXIgZXN0IG9yZG9ubsOpIGRhbnMgdW4gaW5kZXggKirDoCBwYXJ0aXIgZGUgMCoqICgxZXIgw6lsw6ltZW50KSBldCBwZXV0IMOqdHJlIGNpYmzDqSBncsOiY2UgYXV4IGBbIF1gLg0KLSBEZSBsYSBtw6ptZSBmYcOnb24sIGNoYXF1ZSDDqWzDqW1lbnQgZCd1biAqYXJyYXkqIGVzdCBvcmRvbm7DqSBkYW5zIHVuIGluZGV4ICoqw6AgcGFydGlyIGRlIDAqKiAoMWVyIMOpbMOpbWVudCkgZXQgcGV1dCDDqnRyZSBjaWJsw6kgZ3LDomNlIGF1eCBgWyBdYC4gIA0KDQo+IGB2YWx1ZS5zcGxpdCgiKCIpWzFdYCAtPiBNb250csOpYWwgKFF1w6liZWMpID0gPyAgDQo+IGB2YWx1ZS5zcGxpdCgiKCIpWzFdLnNwbGl0KCIpIilbMF1gIC0+IE1vbnRyw6lhbCAoUXXDqWJlYykgPSA/ICANCg0KPC9icj4NCg0KDQohW10oaW1hZ2VzL09SMjUuanBnKQ0KDQo8L2JyPg0KDQrDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1lciAtPiBgdmFsdWUuc3BsaXQoIjsgIikuc29ydCgpLmpvaW4oIjsgIilgIA0KDQohW10oaW1hZ2VzL09SMjYuanBnKQ0KDQotIHNwbGl0KCk6IGRpdmlzZSBsYSBjZWxsdWxlIGVuIMOpbMOpbWVudHMgZGlzdGluY3RzIHN1ciBsYSBiYXNlIGR1IHPDqXBhcmF0ZXVyIDsNCi0gc29ydCgpOiB0cmkgbGVzIMOpbMOpbWVudHMNCi0gam9pbigpOiBsZXMgam9pbnRzIGF2ZWMgbGUgc8OpcGFyYXRldXIgOw0KDQo8L2JyPg0KDQrDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1lciAtPiBgdmFsdWUuc3BsaXQoIjsgIikuc2xpY2UoMSkuam9pbigiOyAiKWAgDQoNCiFbXShpbWFnZXMvT1IyNy5qcGcpDQoNCi0gSWNpIGxhIGZvbmN0aW9uIGBzbGljZSgpYCBjb25zZXJ2ZSBsZXMgw6lsw6ltZW50cyDDoCBwYXJ0aXIgZGUgbCfDqWzDqW1lbnQgZW4gcG9zaXRpb24gMSBkb25jIHN1cHByaW1lIGxlIDAuIA0KDQoNCjwvYnI+DQoNCg0KIVtdKGltYWdlcy9PUjI4LmpwZykNCg0KPC9icj4NCg0Kw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtZXIgLT4gYHZhbHVlLnNwbGl0KC9cbi8pLnNsaWNlKDEpLmpvaW4oIjsgIilgIA0KDQohW10oaW1hZ2VzL09SMjkuanBnKQ0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpDcsOpZXIgdW5lIGZhY2V0dGUgc3VyIGxhIGNvbG9ubmUgKkNvZGUgZGUgbGlldSogcG91ciBpZGVudGlmaWVyIGxlcyBjYXMgZG9udCBsYSB2YWxldXIgY29tbWVuY2UgcGFyICJDw7R0ZSIgIA0KDQpgdmFsdWUuc3RhcnRzV2l0aCjigJxDw7R0ZeKAnSlgICAgIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KQ3LDqWVyIHVuZSBmYWNldHRlIHBvdXIgaWRlbnRpZmllciBsZXMgY2FzIGRvbnQgbGEgdmFsZXVyIGRhbnMgbGUgY29sb25uZSAqQ2F1c2UgcHJpbWFpcmUqIGVzdCBsYSBtw6ptZSBxdWUgZGFucyBsYSBjb2xvbm5lICpDYXVzZSBzZWNvbmRhaXJlKg0KDQpgdmFsdWUgPT0gY2VsbHNbIkNhdXNlIHNlY29uZGFpcmUiXS52YWx1ZWAgICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCkNyw6llciB1bmUgZmFjZXR0ZSBwb3VyIGxpc3RlciBsZXMgY2FzIHNlbG9uIGwnKmhldXJlIGRlIGwnaW5jaWRlbnQqIHNldWxlbWVudCwgc2FucyBsZXMgbWludXRlcyAoMiBwcmVtaWVycyBjYXJhY3TDqHJlcykuIENvbW1lbnQgZmFpcmUgYWZmaWNoZXIgbGVzIG1pbnV0ZXMgc2V1bGVtZW50P15bdmFsdWVbMyw1XSBvdSB2YWx1ZS5zdWJzdHJpbmcoMyldIA0KDQpgdmFsdWVbMCwyXWAgICANCg0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQoqKioNCg0KPC9icj4NCg0KIyAxMC4gIFRyYW5zZm9ybWF0aW9ucw0KDQotIE9wZW5SZWZpbmUgcGVybWV0IGQnZXhwbG9yZXIgbWFpcyBhdXNzaSBkZSBtb2RpZmllciBzZXMgZG9ubsOpZXMgc2FucyBhdm9pciDDoCB0b3VjaGVyIGF1IGNvbnRlbnUgZGUgY2VsbHVsZXMgbWFudWVsbGVtZW50LiAgDQoNCi0gQ29tbWUgcG91ciBsZXMgZmFjZXR0ZXMsIGxlcyBmb25jdGlvbnMgZGUgdHJhbnNmb3JtYXRpb24gcGV1dmVudCBzZSBmYWlyZSBkZSBkZXV4IGZhw6dvbnM6ICAgIA0KDQogIDEuIFRyYW5zZm9ybWF0aW9ucyBhdXRvbWF0aXPDqWVzIChgVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlc2ApICoqWzJdKio6IGZvbmN0aW9ucyBwZXJtZXR0YW50IGQnYXBwbGlxdWVyIGRlcyBtb2RpZmljYXRpb25zIGNvdXJhbnRlcyBzdXIgbGUgZm9ybWF0IGV0IGxhIHN0cnVjdHVyZSBkZXMgY2VsbHVsZXMvY29sb25uZXMuICANCiAgDQogIDIuIFRyYW5zZm9ybWF0aW9ucyBtYW51ZWxsZXMgZGFucyBsYSBmZW7DqnRyZSBHUkVMICoqWzFdKiogYWZpbiBkJ2FsbGVyIGJlYXVjb3VwIHBsdXMgbG9pbi4gIA0KICANCg0KIVtdKGltYWdlcy9PUjI0LmpwZykNCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NClBvdXIgdm9pciBsYSBzeW50YXhlIGNvcnJlc3BvbmRhbnQgw6AgY2hhcXVlIGZvbmN0aW9uIGRlIGB0cmFuc2Zvcm1hdGlvbnMgY291cmFudGVzYCwgYXBwbGlxdWVyIGxhIGZvbmN0aW9uIHN1ciB1bmUgY29sb25uZSBwdWlzIGFsbGVyIHZvaXIgbCdoaXN0b3JpcXVlLiBQYXIgZXhlbXBsZTogYHZhbHVlLnRvTnVtYmVyKClgLCBgdmFsdWUudG9UaXRsZWNhc2UoKWAsIGB2YWx1ZS50b051bWJlcigpYCwgYHZhbHVlLnRvVXBwZXJjYXNlKClgLCBgdmFsdWUudHJpbSgpYC4uLiA8L2Rpdj4NCg0KKioqDQoNCiMjIDEwLjEgQ3LDqWVyIGV0IGNvcGllciBkZXMgY29sb25uZXMNCg0KPC9icj4NCg0KYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmVgDQoNCiFbXShpbWFnZXMvT1IzMi5qcGcpDQoNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkNyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSBzdXIgbGEgYmFzZSBkZSBsYSBjb2xvbm5lICpKb3VyIGRlIGxhIHNlbWFpbmUqIGluZGlxdWFudCBzaSBsZSBqb3VyIGVzdCBlbiBzZW1haW5lIG91IGZpbiBkZSBzZW1haW5lLg0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KYGlmKHZhbHVlID4gNSwiZmluIGRlIHNlbWFpbmUiLCJzZW1haW5lIilgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkNyw6llciB1bmUgY29sb25uZSDDoCBwYXJ0aXIgZGUgbGEgY29sb25uZSAqaGV1cmUgZGUgbCdpbmNpZGVudCogZW4gbmUgY29uc2VydmFudCBxdWUgbCdoZXVyZSwgc2FucyBsZXMgbWludXRlcywgZXQgcmFqb3V0ZXIgbGEgbGV0dHJlIGggcG91ciBkb25uZXIgcGFyIGV4ZW1wbGUgY2VjaTogMTU6MTIgIC0+ICAxNWguICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCmB2YWx1ZS5zcGxpdCgnOicpWzBdICsgImgiYC4gIA0KDQpPdQ0KDQpgdmFsdWUuc3BsaXRCeUxlbmd0aHMoMilbMF1gLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqIA0KDQo8L2JyPg0KDQojIyAxMC4yLiBEaXZpc2VyIGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgbXVsdGl2YXJpw6llcw0KDQotICoqRGV1eCBvcHRpb25zOiAqKiAgDQogIDEuIEVuIGRpdmlzYW50IGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGVuICoqcGx1c2lldXJzIGNvbG9ubmVzKio6IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gRGl2aXNlciBlbiBwbHVzaWV1cnMgY29sb25uZXNgICANCiAgMi4gRW4gZGl2aXNhbnQgbGUgY29udGVudSBzdXIgKipwbHVzaWV1cnMgbGlnbmVzKio6IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBEaXZpc2VyIGxlcyBjZWxsdWxlcyBtdWx0aXZhcmnDqWVzYCAgDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IzNy5qcGcpICANCg0KLSBMYSBwcmVtacOocmUgb3B0aW9uIGVzdCBsYSBwbHVzIGZyw6lxdWVudGUuIA0KLSBMYSBkZXV4acOobWUgb3B0aW9uIGF1cmEgdW4gZWZmZXQgaW1wb3J0YW50IHN1ciBsYSBzdHJ1Y3R1cmUgZGVzIG9ic2VydmF0aW9ucyBwdWlzcXUnZWxsZSBtdWx0aXBsaWVyYSBsZSBub21icmUgZGUgbGlnbmVzIHBhciBjYXMgKGNlIHF1aSBuw6ljZXNzaXRlcmEgZGUgcGFzc2VyIMOgIGxhIHZ1ZSBwYXIgYGVudHLDqWVzYCkuDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpUcmFuc2Zvcm1lciBsYSB2YXJpYWJsZSAqTGlnbmUqDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKlVuaWZvcm1pc2VyIGxlIG5vbSBkZXMgbGlnbmVzOioqICANCg0KLSBDcsOpZXIgdW5lIGZhY2V0dGUgc3VyIGxhIGNvbG9ubmUgTGlnbmUuIA0KDQotIERldXggcHJvYmzDqG1lcyBzZSBwb3NlbnQ6IDEpIGxlcyBub21zIGRlIGxpZ25lcyBub24gdW5pZm9ybWVzIGV0IDIpIGxlcyB2YWxldXJzIG11bHRpcGxlcy4gIA0KDQotIE5vdXMgY2hvaXNpc3NvbnMgZCd1bmlmb3JtaXNlciBsZXMgdmFsZXVycyBlbiB1dGlsaXNhbnQgbGVzIG51bcOpcm9zIGRlIGxpZ25lcyBldCBlbiBzdXBwcmltYW50IGxlIG1vdCBMaWduZS4gIA0KDQotIEV4cGxvcmVyIGV0IGFjY2VwdGVyIGxlcyByZWdyb3VwZW1lbnRzIHByb3Bvc8OpcyBhdmVjIGxhIGZvbmN0aW9uIGBHcm91cGVgLiAgDQoNCi0gU3VwcHJpbWVyIGxlIG1vdCBsaWduZTogIA0KDQogIC0gYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IHJlbXBsYWNlcmAgLT4gIkxpZ25lIiBwYXI6IG5lIHJpZW4gc2Fpc2lyIGRhbnMgbCdlbmNhZHLDqS4gICAgDQoNCi0gQ2xpcXVlciBlbnN1aXRlIGRpcmVjdGVtZW50IHN1ciBgZWRpdGAgc3VyIHVuZSBjZWxsdWxlIGRlIGxhIGNvbG9ubmUgZGUgKkxpZ25lKiAtPiByZW1hcnF1ZXIgbGEgcHLDqXNlbmNlIGQndW4gZXNwYWNlLCBzdXBwcmltZXIgbCdlc3BhY2UgZXQgZmVybWVyLiANCg0KLSBSYWZyYWljaGlyIGxhIGZhY2V0dGUgZXQgb2JzZXJ2ZXIgbCdpbXBhY3QuIA0KDQotIFJlbWFycXVlciBsJ2ltcGFjdCBkZSBsJ2VzcGFjZSBkYW5zIGxhIGZhY2V0dGUuIENlcyBlc3BhY2VzIHBldXZlbnQgw6p0cmUgc3VwcHJpbcOpcyBncsOiY2Ugw6AgbGEgZm9uY3Rpb246IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzIC0+IFN1cHByaW1lciBsZXMgZXNwYWNlcyBkZSBkw6lidXQgZXQgZGUgZmluYC4gICANCi0gUmVtcGxhY2VyIGxlcyBjb3VsZXVycyBkZSBsaWduZSBwYXIgbGV1ciBudW3DqXJvIGRpcmVjdGVtZW50IGRhbnMgbGEgZmFjZXR0ZS4gICANCjwvZGl2Pg0KDQoNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqRGl2aXNlciBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBlbiBjcsOpYW50IGRlcyBjb2xvbm5lcyBhdmVjIHVuZSBzZXVsZSB2YWxldXIgICoqDQoNCi0gRGFucyBsYSBmYWNldHRlLCByZW1wbGFjZXIgbGVzICItIiBwYXIgZGVzICIsIi4gICAgDQoNCi0gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEaXZpc2VyIGVuIHBsdXNpZXVycyBjb2xvbm5lc2A6DQogIC0gRMOpZmluaXIgbGUgc8OpcGFyYXRldXIgIiwiIChjZWx1aS1jaSBkaXNwYXJhaXRyYSkuICANCiAgLSBEw6ljb2NoZXIgbGVzIG9wdGlvbnMgIkRldmluZXIiIGV0ICJTdXBwcmltZXIiLiAgDQotIExlcyBub3V2ZWxsZXMgY29sb25uZXMgcmVwcmVuZHJvbnQgbGUgbm9tIGRlIGwnb3JpZ2luYWwgbnVtw6lyb3TDqS4gTGVzIHJlbm9tbWVyOiBwcmVtaWVyZSwgZGV1eGllbWUsIHRyb2lzaWVtZSwgcXVhdHJpZW1lLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkRpdmlzZXIgcGFyIGxlcyBsb25ndWV1cnMgZGUgY2hhbXBzIGxhIGNvbG9ubmUgYE51bcOpcm8gZCdpbmNpZGVudGAgcG91ciBlbiBjcsOpZXIgZGV1eCBub3V2ZWxsZXM6ICANCiAgMS4gVW5lIGNvbG9ubmUgY29udGVuYW50IGxlIHByZW1pZXIgY2FyYWN0w6hyZSBpbmRpcXVhbnQgbGUgdHlwZSBkJ2luY2lkZW50LCBzb2l0IFQgKHRyYWluKSBvdSBTIChzZXJ2aWNlKS4gIA0KICAyLiBVbmUgY29sb25uZSBjb250ZW5hbnQgbCdlbnNlbWJsZSBkZXMgY2FyYWN0w6hyZXMgbnVtw6lyaXF1ZXMgaW5kaXF1YW50IGxlIG51bcOpcm8gZCdpbmNpZGVudC4gIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipWw6lyaWZpY2F0aW9ucyBwcsOpYWxhYmxlczoqKg0KICAxLiBWw6lyaWZpZXIgcXUnaWwgbid5IGEgcGFzIGRlIGRvdWJsb24gZGFucyBjZXR0ZSBjb2xvbm5lOiBgRmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIC0+IEZhY2V0dGUgZG91YmxvbmAgLT4gUXVlbCBlc3QgbGUgcHJvYmzDqG1lPyAgQ2xpcXVlciBzdXIgYENoYW5nZXJgIGV0IGFuYWx5c2VyIGwnZXhwcmVzc2lvbi4gIA0KICAyLiBWw6lyaWZpZXIgbGEgbG9uZ3VldXIgZGUgY2hhcXVlIGNhczogIGBGYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgLT4gRmFjZXR0ZSBsb25ndWV1ciBkdSB0ZXh0ZWAuICAgIA0KDQoqKkRpdmlzZXIgbGEgY29sb25uZToqKiAgDQotIGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gRGl2aXNlciBlbiBwbHVzaWV1cnMgY29sb25uZXMgc2Vsb24gbGVzIGxvbmd1ZXVycyBkZSBjaGFtcHNgIDogMSwgOC4gICAgDQotIETDqWNvY2hlciA6IGRldmluZXIgbGUgdHlwZSBkZSBjZWxsdWxlIGV0IFN1cHByaW1lciBjZXR0ZSBjb2xvbm5lLiAgICANCi0gUmVub21tZXIgbGVzIGNvbG9ubmVzIDogVHlwZSBldCBJRC4gICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMjIyBSZWNoZXJjaGVyL3JlbXBsYWNlciB1biBjYXJhY3TDqHJlIGRhbnMgdG91dGVzIGxlcyBjb2xvbm5lcyBhdmVjIEdSRUwNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NClJlbXBsYWNlciBsZXMgdmFsZXVycyAiIyIgZGFucyB0b3V0ZSBsYSBiYXNlIGRlIGRvbm7DqWVzIHBhciAiYXVjdW4iKiogICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gUXVlbCBwcm9ibMOobWUgY2UgcmVtcGxhY2VtZW50IHBldXQtaWwgcHJvdm9xdWVyPyAgICANCi0gRXhwbG9yZXIgbCdpbXBhY3QgZGVzIHRyb2lzIGV4cHJlc3Npb25zIGRlIHJlbXBsYWNlbWVudCBzdWl2YW50ZXM6ICANCg0KMS4gYHZhbHVlLnJlcGxhY2UoIiMiLCAiYXVjdW4iKWAgICANCihyZW1wbGFjZSBsZSBjYXJhY3TDqHJlICM6IGF1Y3VuIGV0IGF1Y3VuTi9EICkgICAgIA0KIA0KMi4gYGlmKHZhbHVlLmNvbnRhaW5zKCIjIiksImF1Y3VuIiwgdmFsdWUpYCAgIA0KKHJlbXBsYWNlIGxlcyBjZWxsdWxlcyBkZXMgIyBldCAjTkQgcGFyIGF1Y3VuKSAgDQoNCjMuIGBpZih2YWx1ZT09KCIjIiksImF1Y3VuIiwgdmFsdWUpYCAgICAgDQoocmVtcGxhY2Ugc2V1bGVtZW50IGxlcyBjZWxsdWxlcyAjLCBwYXMgbGVzICNORCBwYXIgYXVjdW4pIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIyAxMC4zLiBGdXNpb25uZXIgbGUgY29udGVudSBkZSBwbHVzaWV1cnMgY29sb25uZXMNCg0KIyMjIETDqWZpdCAgIA0KTm91cyBzb3VoYWl0b25zIGNhbGN1bGVyIGxhIGR1csOpZSBkZXMgaW5jaWRlbnRzLiBQb3VyIGNlIGZhaXJlIG5vdXMgY3LDqWVyb25zIGRldXggY29sb25uZXM6ICANCi0gVW5lIGNvbG9ubmUgZnVzaW9ubmFudCBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgbCdpbmNpZGVudCouICANCi0gVW5lIGNvbG9ubmUgZnVzaW9ubmFudCBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgbCdpbmNpZGVudCouICANCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCkxvcnNxdWUgbCdvbiBmdXNpb25uZSBkZXMgY29sb25uZXMsIGlsIGZhdXQgcG9ydGVyIHVuZSBhdHRlbnRpb24gcGFydGljdWxpw6hyZSBhdSBzw6lwYXJhdGV1ciBjaG9pc2kuIE5lIHBhcyB1dGlsaXNlciB1biBjYXJhY3TDqHJlIHF1aSBwb3VycmFpdCBmYWlyZSBwYXJ0aWUgZHUgY29udGVudSAoZXg6ICwpIG91IHF1aSBzZXJ2aXJhIMOgIGRpdmlzZXIgbGVzIGNvbG9ubmVzICguY3N2KQ0KPC9kaXY+DQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQoxLiAqKkZvbmN0aW9uIGF1dG9tYXRpc8OpZSoqIC0+IEZ1c2lvbm5lciBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgbCdpbmNpZGVudCoNCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBBbm7DqWUgY2l2aWxlIC0+IGDDiWRpdGVyIGxhIGNvbG9ubmVgIC0+IGBKb2luZHJlIGxlcyBjb2xvbm5lc2AuICAgIA0KLSBKb2luZHJlIGRlcyBjb2xvbm5lcyAtPiBDb2NoZXIgbGVzIGNvbG9ubmVzIHZvdWx1ZXMuICANCi0gU8OpcGFyYXRldXIgZW50cmUgbGUgY29udGVudSBkZSBjaGFxdWUgY29sb25uZTogIi0iLiAgICANCi0gw4ljcmlyZSBsZSByw6lzdWx0YXQgZGFucyB1bmUgbm91dmVsbGUgY29sb25uZSBub21tw6llOiAqRGF0ZSouICAgIA0KDQotIFRyYW5zZm9ybWVyIGVuIGZvcm1hdCBkYXRlOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlcyAtPiBFbiBkYXRlYC4gICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCjIuICoqRmVuw6p0cmUgR1JFTCoqIC0+IEZ1c2lvbm5lciBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgcmVwcmlzZSoNCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBBbm7DqWUgY2l2aWxlIC0+IMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmU6ICANCg0KYGNlbGxzWyJBbm7DqWUgY2l2aWxlIl0udmFsdWUgKyAiLSIgKyAiMCIgKyBjZWxsc1siTW9pcyBjYWxlbmRyaWVyIl0udmFsdWUgKyAiLSIgKyAiMCIgKyBjZWxsc1siSm91ciBkdSBtb2lzIl0udmFsdWUgKyAiICIgKyAgY2VsbHNbIkhldXJlIGRlIGwnaW5jaWRlbnQiXS52YWx1ZWAuICANCg0KLSBWw6lyaWZpZXIgbGEgdHJhbnNmb3JtYXRpb24gYXZlYyB1bmUgZmFjZXR0ZSBgdmFsdWUudHlwZSgpYC4gIA0KDQotIFJlY29tbWVuY2VyIGxhIGpvaW50dXJlIHBvdXIgY3LDqWVyIHVuZSBjb2xvbm5lIGF2ZWMgbGEgZGF0ZS1oZXVyZSBkZSBmaW4gZGUgbCdpbmNpZGVudA0KYGNlbGxzWyJBbm7DqWUgY2l2aWxlIl0udmFsdWUgKyAiLSIgKyAiMCIgKyBjZWxsc1siTW9pcyBjYWxlbmRyaWVyIl0udmFsdWUgKyAiLSIgKyAiMCIgKyBjZWxsc1siSm91ciBkdSBtb2lzIl0udmFsdWUgKyAiICIgKyAgY2VsbHNbIkhldXJlIGRlIGwnaW5jaWRlbnQiXS52YWx1ZWAuICANCg0KLSBUcmFuc2Zvcm1lciBlbiBmb3JtYXQgZGF0ZTogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gRW4gZGF0ZWAuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KQ2FsY3VsZXIgbGEgZHVyw6llIGRlIGwnaW5jaWRlbnQgIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQotIENyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSB2aWRlOiAgDQpgRWRpdCBDb2x1bW4gPiBBZGQgQ29sdW1uIEJhc2VkIG9uIFRoaXMgQ29sdW1uIGAgLT4gQ2hvaXNpciB1biBub3V2ZWF1IG5vbSBldCBsZSBjb250ZW51OiAiIi4gIA0KDQotIFBvdXIgY2FsY3VsZXIgdW5lIGRpZmbDqXJlbmNlIGVudHJlIGRhdGU6IGBkaWZmKGRhdGUxLCBkYXRlMiwgInJlc3VsdHMgZm9ybWF0IilgLiAgICANCg0KYGRpZmYoY2VsbHNbJ2RhdGUyJ10udmFsdWUsY2VsbHNbJ2RhdGUxJ10udmFsdWUsICdtaW51dGVzJylgLiAgIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCjwvYnI+DQoNCiMgMTEuIExlcyBleHByZXNzaW9ucyByw6lndWxpw6hyZXMgeyNleHByZXNzaW9ufQ0KDQo8L2JyPg0KDQotIEwndXNhZ2UgZGUgR1JFTCBwZXJtZXQgZGVzIG1hbmlwdWxhdGlvbnMgZGUgZG9ubsOpZXMgYmVhdWNvdXAgcGx1cyBhdmFuY8OpZXMgcXVlIGwndXRpbGlzYXRpb24gZGVzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzLCBtYWlzIE9wZW5SZWZpbmUgcGVybWV0IGVuIHBsdXMgZGUgY29tYmluZXIgbCd1dGlsaXNhdGlvbiBkZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIGF2ZWMgR1JFTCBwb3VyIGVuIGF1Z21lbnRlciBsYSBwdWlzc2FuY2UuIA0KLSBMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHBlcm1ldHRlbnQsIMOgIHBhcnRpciBkJ3VuZSBzeW50YXhlIHNww6ljaWZpcXVlLCBkJ2lkZW50aWZpZXIgZGVzIHBhdHRlcm5zIGRhbnMgdW4gY29udGVudS4gIA0KLSBMb3JzcXUndXRpbGlzw6llcyBhdmVjIEdSRUwsIGNlcyBleHByZXNzaW9ucyBwZXJtZXR0ZW50IGRvbmMgZCdpZGVudGlmaWVyIGV0IGQnZXh0cmFpcmUgZGVzIGNvbnRlbnVzIHRyw6hzIHByw6ljaXMgcG91ciBlbnN1aXRlIGxlcyBtYW5pcHVsZXIgc2Vsb24gbGVzIGJlc29pbnMuICANCi0gRWxsZXMgcGV1dmVudCDDqnRyZSB1dGlsaXPDqWVzIMOgIGRpZmbDqXJlbnRzIGVuZHJvaXRzIGRhbnMgT3BlblJlZmluZSBldCBkb2l2ZW50IHRvdWpvdXJzIMOqdHJlIGVudG91csOpZXMgZGUgYC8gL2A6IGZpbHRyZXMsIGZhY2V0dGVzLCBmZW7DqnRyZSBHUkVMLg0KLSBDZXJ0YWluZXMgZXhwcmVzc2lvbnMgcGV1dmVudCBzJ8OpY3JpcmUgZW4gR1JFTCBhdmVjIG91IHNhbnMgcmVnZXguICANCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjMzLmpwZykNCg0KDQotIE1haXMgY2VydGFpbmVzIGZvbmN0aW9ucyAoY29tbWUgYG1hdGNoYCkgbidhY2NlcHRlbnQgcXVlIGNlcyBleHByZXNzaW9ucy4gIA0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCg0KTGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpZXMgYXZlYyBwbHVzaWV1cnMgYXV0cmVzIGxhbmdhZ2VzIGRvbnQgW1JdKGh0dHBzOi8vdG93YXJkc2RhdGFzY2llbmNlLmNvbS9hLWdlbnRsZS1pbnRyb2R1Y3Rpb24tdG8tcmVndWxhci1leHByZXNzaW9ucy13aXRoLXItZGY1ZTg5N2NhNDMyKSBldCBbUHl0aG9uXShodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2hvd3RvL3JlZ2V4Lmh0bWwpIGV0IGRhbnMgZGVzIGxvZ2ljaWVscyBxdWkgbidvbnQgcmllbiDDoCB2b2lyIGF2ZWMgbGVzIHN0YXRpc3RpcXVlcyBjb21tZSBbT3Blbk9mZmljZV0oaHR0cHM6Ly93aWtpLm9wZW5vZmZpY2Uub3JnL3dpa2kvRG9jdW1lbnRhdGlvbi9Ib3dfVG9zL1JlZ3VsYXJfRXhwcmVzc2lvbnNfaW5fV3JpdGVyKS4NCg0KUG91ciBlbiBzYXZvaXIgcGx1czogIA0KLSBodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvVW5kZXJzdGFuZGluZy1SZWd1bGFyLUV4cHJlc3Npb25zICANCi0gaHR0cHM6Ly9yZWdleDEwMS5jb20vICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCkxhIHN5bnRheGUgZXN0IGNvbXBvc8OpZSBkJ8OpbMOpbWVudHMgcGVybWV0dGFudCBkZSAgY2libGVyIGRlcyBjYXJhY3TDqHJlcyBwcsOpY2lzIGV0IGRlIGTDqWZpbmlyIGxldXIgZW1wbGFjZW1lbnQgZXQgbGV1ciBvY2N1cmVuY2UuDQoNCiMjIyMgTGEgc3ludGF4ZSBkZSBiYXNlOiANCg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBUWVBFUyBERSBDQVJBQ1TDiFJFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBRVUFOVElGSUNBVEVVUlMgRVQgRU1QTEFDRU1FTlQgICAgICAgICAgICAgICAgIHwgDQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rDQp8IGAuYCA6IE7igJlpbXBvcnRlIHF1b2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgK2AgOiAxIG91IHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFx3YCA6IG4naW1wb3J0ZSBxdWVsIG1vdCwgY2hpZmZyZSBvdSBfICAgIChgXFdgIDogc2F1ZikgICAgICAgICAgICAgICAgICAgICAgIHwgYCpgIDogMCBvdSBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFxkYCA6IENoaWZmcmVzICAgICAgKGBcRGAgOiBzYXVmKSAgICAgICAgICAgICAgICAgICAgfCBgP2AgOiAwIG91IHVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBcc2AgOiBFc3BhY2VzICAgICAgICAgKGBcU2AgOiBzYXVmKSAgICAgICAgICAgICAgICAgIHwgYHsyfWAgOiBOb21icmUgZXhhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBbQS1aXWAgOiBNYWp1c2N1bGVzICAgICAoYFteQS1aXWAgOiBzYXVmKSAgICAgICAgICAgIHwgYHssNH1gIDogRW50cmUgMCBldCA0IGluY2wuICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgW2Etel1gIDogTWludXNjdWxlcyAgICAgIChgW15hLXpdYCA6IHNhdWYpICAgICAgICAgICB8IGB7NCx9YCA6IDQgb3UgcGx1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgW2FiZDtdYCA6IGxlcyBsZXR0cmVzIGEsIGIsIGMsIGQgZXQgbGUgOyAgICAgICAgICAgICB8IGB7MTszfWAgOiAxIE9VIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBhYmNkYCA6IHVuZSBvdSBwbHVzaWV1cnMgbGV0dHJlcyBleGFjdGVzICAgICAgICAgICAgIHwgYHsxLDN9YCA6IEVudHJlIDEgZXQgMyBpbmNsLiAgICAgICAgICAgICAgICAgICAgIHwgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHxgIDogT3UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYF5gIDogRMOpYnV0IGQndW5lIGxpZ25lICAgICAgICAgICAgICAgIHwgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYCgpYCA6IEdyb3VwZXIgdW4gY29udGVudSBldCBsZSBnYXJkZXIgZW4gbcOpbW9pcmUgICAgICB8IGAkYCA6IEZpbiBkJ3VuZSBsaWduZSBvdSByYXBwZWxsZXIgdW4gZ3JvdXBlICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCAgYFxgIDogQ2hlcmNoZXIgdW4gY2FyYWN0w6hyZSBzcMOpY2lhbCBsaXR0w6lyYWxlbWVudCAgICB8IFNhbnMgcXVhbnRpZmljYXRldXIsIGwnb2NjdXJlbmNlIGVzdCBkZSAxICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KDQojIyMjIyBQYXIgZXhlbXBsZSwgamUgY2hlcmNoZSB1biBjb250ZW51IGNvcnJlc3BvbmRhbnQgYXUgbW90aWY6ICANCg0KYF5cZHs0fSArW0EtWl1cLmAgICAgDQogICANCi0gZMOpYnV0ZSBwYXIgNCBjaGlmZnJlcyAgIA0KLSBzdWl2aSBkJ3VuIGVzcGFjZSBvdSBwbHVzICAgDQotIHN1aXZpIGQndW5lIGxldHRyZSBtYWp1c2N1bGUgYXZlYyB1biBwb2ludCAgIA0KDQoNCiMjIyMjIEF1dHJlcyBleGVtcGxlcyBhdmVjIGxhIHN5bnRheGUgT3BlblJlZmluZToNCg0KLSBgdmFsdWUuZmluZCgvW0NjXWFyb2xpbmUvKWA6IENhcm9saW5lIGV0IGNhcm9saW5lDQoNCi0gYHZhbHVlLmZpbmQoL2NhK3JvbGluZS8pYDogY2Fyb2xpbmUgZXQgY2FhYWFyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2Eqcm9saW5lLylgOiBjYXJvbGluZSwgY2FhYXJvbGluZSBldCBjcm9saW5lDQoNCi0gYHZhbHVlLmZpbmQoL2NhP3JvbGluZS8pYDogY2Fyb2xpbmUgZXQgY3JvbGluZSBtYWlzIHBhcyBjYWFhcm9saW5lDQoNCi0gYHZhbHVlLmZpbmQoL2NhezR9cm9saW5lLylgOiBjYWFhYXJvbGluZQ0KDQotIGB2YWx1ZS5maW5kKC9eQ2Fyb2xcYi8pYDogQ2Fyb2wgZW4gZMOpYnV0IGQnZXhwcmVzc2lvbiwgbWFpcyBwYXMgQ2Fyb2xpbmUgKFxiID0gImJvdW5kYXJ5IikNCg0KLSBgdmFsdWUuZmluZCgvY1thLXpdezZ9ZS8pYDogYyArIDYgbWludXNjdWxlcyArIGUNCg0KLSBgdmFsdWUuZmluZCgvQ1thLXpBLVowLTldezZ9ZS8pYDogQyArIDYgbWludXNjdWxlcywgbWFqdXNjdWxlcyBvdSBjaGlmZnJlcyArIGUNCg0KLSBgdmFsdWUuZmluZCgvQ1x3ezZ9ZS8pYDogQyArIFtBLVphLXowLTlfXSArIGUNCg0KLSBgdmFsdWUuZmluZCgvQy57Nn1lLylgOiBDICsgNiBuJ2ltcG9ydGUgcXVvaSArIGUNCg0KDQoqKioNCg0KDQojIyMgRXhlcmNpY2U6IGRpdmlzZXIgbGVzIMOpbMOpbWVudHMgZGUgcsOpZsOpcmVuY2VzIGJpYmxpb2dyYXBoaXF1ZXMgZW4gZm9ybWF0IEFQQQ0KDQohW10oaW1hZ2VzL09SMzYuanBnKQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KMS4gQWxsZXIgc3VyIGxlIFtndWlkZSBBUEFdKGh0dHBzOi8vYmliLnVtb250cmVhbC5jYS9jaXRlci9zdHlsZXMtYmlibGlvZ3JhcGhpcXVlcy9hcGE/dGFiPTMyODEpLiAgICAgDQoyLiBDb3BpZXIgbGVzIGRldXggcsOpZsOpcmVuY2VzIGRlIExlbWFpcmUgZXQgTGVib3ZpY2kgYXUgcG9pbnQgMi4xLiAgICAgIA0KMy4gRGFucyBPcGVuUmVmaW5lLCBjbGlxdWVyIHN1ciBsZSBwZXRpdCBsb2dvIGVuIGhhdXQgw6AgZ2F1Y2hlIC0+IGBDcsOpZXIgdW4gcHJvamV0YCAtPiBgUHJlc3NlLXBhcGllcmA6IENvbGxlciBsZXMgZGV1eCByw6lmw6lyZW5jZXMgZW4gIGFqb3V0YW50IHVuIHPDqXBhcmF0ZXVyICoqIjsiKiogw6AgbGEgZmluIGRlIGxhIHByZW1pw6hyZSAtPiBTdWl2YW50LiAgICAgICANCg0KNC4gTW9kaWZpZXIgbGVzIG9wdGlvbnM6IA0KICAtIExlcyBjb2xvbm5lcyBzb250IHPDqXBhcsOpZXMgcGFyIC0gcGVyc29ubmFsaXPDqSAiOyIuICANCiAgLSBEw6ljb2NoZXIgIkFuYWx5c2VyIGxhIG91IGxlcwkxIGxpZ25lKHMpIHN1aXZhbnRlKHMpIGNvbW1lIGRlcyBlbnTDqnRlcyBkZSBjb2xvbm5lcyIuICANCjUuIENyw6llciBwcm9qZXQuICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCjYuIGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBlbiBmb25jdGlvbiBkZSBjZXR0ZSBjb2xvbm5lYCAgDQoNCjcuIEV4YW1pbmVyIGwnaW1wYWN0IGRlIGNlcyBkZXV4IGNvbW1hbmRlcyAqKkdSRUwgKyByZWdleCoqLiBRdSdlc3QtY2UgcXVpIHNlIHBhc3NlPw0KDQo8L2JyPg0KDQo+IGB2YWx1ZS5maW5kKC9cKC4qP1wpLylgICANCg0KPiBgdmFsdWUuZmluZCgvXCguKj9cKS8pLmpvaW4oJywnKS5yZXBsYWNlKCIoIiwiICIpLnJlcGxhY2UoIikiLCAiIilgICANCg0KPC9icj4NCg0KICAtIENyw6llciBsYSBjb2xvbm5lIEF1dGV1ciA6IGB2YWx1ZS5wYXJ0aXRpb24oIigiKVswXWAgb3UgYHZhbHVlLnNwbGl0KCIoIilbMF1gICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgQW5uw6llOiBgdmFsdWUucGFydGl0aW9uKCIoIilbMl0ucGFydGl0aW9uKCIpIilbMF1gICAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKj8oXGR7NH0pLio/LylbMF1gLiAgICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSB0aXRyZTogYHZhbHVlLnBhcnRpdGlvbigiKS4iKVsyXS5wYXJ0aXRpb24oIigiKVswXWAuICAgICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgw6lkaXRldXI6IGB2YWx1ZS5wYXJ0aXRpb24oIikuIilbMl0ucGFydGl0aW9uKCIpLiIpWzJdYC4gICAgIA0KICAtIENyw6llciBsYSBjb2xvbm5lIMOpZGl0aW9uOiBgdmFsdWUucGFydGl0aW9uKCIpLiIpWzJdLnBhcnRpdGlvbigiKCIpWzJdLnBhcnRpdGlvbigiw6lkIilbMF1gIG91IGF2ZWMgcmVnZXg6IGB2YWx1ZS5tYXRjaCgvLiooXGQrKS4gw6lkLiovKVswXWAuICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSB2b2x1bWU6IGB2YWx1ZS5wYXJ0aXRpb24oInZvbC4iKVsyXS5wYXJ0aXRpb24oIikiKVswXWAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKnZvbC4gKFxkKykuKi8pWzBdYC4gIA0KQXZlYyByZWdleDogIA0KLSBTdXBwcmltZXIgbGVzIGxldHRyZXMgZHUgcHLDqW5vbTogYHZhbHVlLnJlcGxhY2UoLyhcc1tBLVpdLlxzKXwoXHNbQS1aXS4sXHMpLywgIiAiKWAuICANCi0gU3VwcHJpbWVyIHRvdXQgbGUgY29udGVudSBzYXVmIGxlcyBub21zIGRlIGZhbWlsbGVzOiBgdmFsdWUucmVwbGFjZSgvKFxzW0EtWl0uXHMpfChcc1tBLVpdLixccyl8KGV0KXwoLCkvLCAiICIpYC4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQojIDEyLiBUcmFuc3Bvc2l0aW9uDQoNCiMjIEV4ZXJjaWNlOiB0cmFuc3Bvc2VyIHVuIHRhYmxlYXUgZCdpbmRpY2F0ZXVycyBkdSBXREkNCjwvYnI+DQoNCioqRmljaGllciBvcmlnaW5hbCB0w6lsw6ljaGFyZ8OpIGRlIGxhIFtCYW5xdWUgbW9uZGlhbGVdKGh0dHBzOi8vZGF0YWJhbmsuYmFucXVlbW9uZGlhbGUub3JnL3JlcG9ydHMuYXNweD9zb3VyY2U9d29ybGQtZGV2ZWxvcG1lbnQtaW5kaWNhdG9ycykgZW4gZm9ybWF0IC5jc3YgY29tcG9zw6kgZGUgNSBwYXlzIGV0IDQgaW5kaWNhdGV1cnMgw6AgbCdob3Jpem9udGFsZSBldCAzIGFubsOpZXMgw6AgbGEgdmVydGljYWxlKiogIA0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTEuanBnKQ0KDQo8L2JyPg0KDQoqKjEuIFRyYW5zcG9zZXIgbGVzIGRhdGVzIMOgIGwnaG9yaXpvbnRhbGUgKGZvcm1hdCAqbG9uZyopKiogIA0KDQo8L2JyPg0KDQoqw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNwb3NlciAtPiBUcmFuc3Bvc2VyIGxlcyBjZWxsdWxlcyBkZSBwbHVzaWV1cnMgY29sb25uZXMgZW4gbGlnbmVzLi4uKg0KDQoNCjwvYnI+DQoNCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2UyLmpwZykNCg0KPC9icj4NCg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTMuanBnKQ0KDQo8L2JyPg0KDQoqKjIuIFJlbXBsaXIgYXV0b21hdGlxdWVtZW50IGxlcyBjZWxsdWxlcyB2aWRlcyBkZXMgZGV1eCBjb2xvbm5lcyDDoCBsYSB2ZXJ0aWNhbGUqKg0KDQoqw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gUmVjb3BpZXIgbGVzIHZhbGV1cnMgZGFucyBsZXMgY2VsbHVsZXMgdmlkZXMgY29uc8OpY3V0aXZlcyoNCg0KPC9icj4NCg0KKiozLiBUcmFuc3Bvc2VyIGxlcyBpbmRpY2F0ZXVycyBlbiB2YXJpYWJsZXMgw6AgbGEgdmVydGljYWxlKioNCg0KKlRyYW5zcG9zZXIgLT4gQ29udmVydGlyIGVuIGxpc3RlIGxlcyBjb2xvbm5lcyBkZSBjbMOpL3ZhbGV1ci4uLioNCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2U0LmpwZykNCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2U1LmpwZykNCg0KPC9icj4NCg0KDQoqKioNCg0KIyAxMy4gRXhwb3J0ZXIgdW4gZmljaGllciBldCBmZXJtZXIgT3BlblJlZmluZQ0KDQotIEZvbmN0aW9uIMOgIHV0aWxpc2VyIGxvcnNxdWUgbCdvbiBlc3QgcHLDqnQgw6AgZXhwb3J0ZXIgc29uIGZpY2hpZXIgZW4gZGlmZsOpcmVudHMgZm9ybWF0cyBwb3VyIHRyYXZhaWxsZXIgZGFucyB1biBhdXRyZSBsb2dpY2llbCAoLmNzdiwgLnhscy4uLikNCi0gT1Igc2F1dmVnYXJkZSBhdXRvbWF0aXF1ZW1lbnQgbGVzIGZpY2hpZXJzIHNvdXMgZm9ybWUgZCdhcmNoaXZlcyBkZSBwcm9qZXQgZGFucyB1biBkb3NzaWVyIHN1ciBsZSBwb3N0ZSBkZSB0cmF2YWlsIGF1eHF1ZWxsZXMgb24gcGV1dCBhY2PDqWRlciBlbiBjbGlxdWFudCBzdXIgYE91dnJpciB1biBwcm9qZXRgIHN1ciBsYSBwYWdlIHByaW5jaXBhbGUuDQotIEwnb3V0aWwgYEV4cG9ydGV1ciB0YWJ1bGFpcmUgcGVyc29ubmFsaXPDqWAgZXN0IHRyw6hzIHV0aWxlIHBvdXIgcGFyYW3DqXRyZXIgbCdleHBvcnRhdGlvbiAoc8OpbGVjdGlvbiBkZSBjb2xvbm5lcywgZm9ybWF0IGRlIGRhdGVzLCBmb3JtYXQgZGUgZmljaGllci4uLikNCi0gRmVybWVyIGwnb25nbGV0IG5lIGZlcm1lIHBhcyBsZSBzZXJ2ZXVyIHF1aSBjb250aW51ZXJhIMOgIHJvdWxlciBlbiBhcnJpw6hyZS1wbGFuLg0KLSBBbGxlciDDoCBsYSBmZW7DqnRyZSBub2lyZSBkdSB0ZXJtaW5hbCBldCB1dGlsaXNlciBsZXMgdG91Y2hlcyBDVFJMICsgQyBqdXNxdSfDoCBjZSBxdSdlbGxlIHNlIGZlcm1lIGQnZWxsZS1tw6ptZSAoaWwgZXN0IHBhcmZvaXMgbsOpY2Vzc2FpcmUgZGUgcsOpcMOpdGVyIMOgIHBsdXMgZCd1bmUgcmVwcmlzZSkuIExlIGZpY2hpZXIgc2VyYSBlbnJlZ2lzdHLDqSB1bmUgZGVybmnDqHJlIGZvaXMgZXQgbGUgbG9naWNpZWwgc2VyYSAgbWFpbnRlbmFudCBiZWwgZXQgYmllbiBmZXJtw6kuDQoNCjwvYnI+DQoNCioqKg0KDQoNCiMgMTQuIFBvdXIgZmFpcmUgZHVyZXIgbGUgcGxhaXNpciENCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgRXh0cmFpcmUgc2V1bGVtZW50IGNlcnRhaW5zIGNhcmFjdMOocmVzIHNlbG9uIGxldXIgcG9zaXRpb24NCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KRXh0cmFpcmUgc2V1bGVtZW50IGxlcyBjYXJhY3TDqHJlcyBkZSA1IMOgIDcgIA0KDQotIHZhbHVlWzUsIDddDQoNCkV4dHJhaXJlIGxlcyBjYXJhY3TDqHJlcyDDoCBwYXJ0aXIgZGUgNSAgDQoNCi0gdmFsdWUuc3Vic3RyaW5nKDUpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgU2F2b2lyIHNpIHVuZSBjb25kaXRpb24gZXN0IHZyYWllIG91IGZhdXNzZT8NCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkVzdC1jZSBxdWUgbGUgY29udGVudSBkZXMgdmFsZXVycyBjb3JyZXNwb25kIMOgICIyMDE5LTAxLTAxIiAgDQoNCi0gdmFsdWU9PSIyMDE5LTAxLTAxIg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENvbm5hw650cmUgbGEgbG9uZ3VldXIgZGVzIHZhbGV1cnMgZCd1bmUgY29sb25uZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSB2YWx1ZS5sZW5ndGgoKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENvbXB0ZXIgbGUgbm9tYnJlIGRlIG1vdHMgZGFucyBkZXMgY2VsbHVsZXMgKHPDqXBhcsOpcyBwYXIgZGVzIGVzcGFjZXMpDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHZhbHVlLnNwbGl0KCIgIikubGVuZ3RoKCkgb3UgdmFsdWUuc3BsaXQoL1xzLykubGVuZ3RoKCkNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBDYWxjdWwgZCd1biBwb3VyY2VudGFnZSBhcnJvbmRpIChleCBkJ3VuIHLDqXN1bHRhdCBzdXIgMTApDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHJvdW5kKCh2YWx1ZSoxMDApIC8gMTApDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgVHJhbnNmb3JtZXIgdW4gZm9ybWF0IGRhdGUgZW4gZm9ybWF0IHRleHRlIHBsdXMgbGlzaWJsZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSB2YWx1ZS50b1N0cmluZygiZGQgTU1NTSB5eXl5IikNCg0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgTGEgY3LDqWF0aW9uIGV0IG1hbmlwdWxhdGlvbiBkZSBsaXN0ZXMgKCphcnJheSopIC0gRGl2aXNlciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRGl2aXNlciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIGVuIGZvbmN0aW9uIGQndW4gc8OpcGFyYXRldXIgcG91ciBuZSBjb25zZXJ2ZXIgcXVlIGxlIHByZW1pZXIgw6lsw6ltZW50ICAgIA0KDQotIHZhbHVlLnNwbGl0KCIgIilbMF0NCg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgcG91ciBsZSByw6lvcmRvbm5lciANCg0KLSB2YWx1ZS5zcGxpdCgiLCIpLnJldmVyc2UoKS5qb2luKCIsIikNCg0KLSB2YWx1ZS5zcGxpdCgiLCIpLnNvcnQoKS5qb2luKCIsIikNCg0KRGl2aXNlciBhcHLDqHMgbGVzIDMgcHJlbWllcnMgY2FyYWN0w6hyZXMgZXQgY29uc2VydmVyIGxlIHByZW1pZXIgw6lsw6ltZW50ICANCg0KLSB2YWx1ZS5zcGxpdEJ5TGVuZ3RocygzKVswXSANCg0KRGl2aXNlciBzZWxvbiBsZSB0eXBlIGRlIGNhcmFjdMOocmVzIGV0IHJldGVuaXIgbGUgZGV1eGnDqG1lIMOpbMOpbWVudCAgDQoNCi0gdmFsdWUuc3BsaXRCeUNoYXJUeXBlKClbMV0NCg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgc3VyIHVuIHRlcm1lIHggZXQgY29uc2VydmVyIGxlIGNvbnRlbnUgcHLDqWPDqWRlbnQgDQoNCi0gdmFsdWUucGFydGl0aW9uKCJ0ZXJtZSIpWzBdDQoNCi0gdmFsdWUucGFydGl0aW9uKCIgdG8gIilbMl0ucGFydGl0aW9uKCIgb24gIilbMF0NCmh0dHA6Ly93d3cuZGF2aWRodXluaC5uZXQvc3BhY2VzL25pY2FyMjAxMS90dXRvcmlhbC5wZGYNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBJbnZlcnNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkRpdmlzZXIgbGUgY29udGVudSBkJ3VuZSBjZWxsdWxlIGV0IGludmVyc2VyIGwnb3JkcmUgZGUgcHLDqXNlbnRhdGlvbiBlbiBham91dGFudCB1bmUgdmlyZ3VsZSBlbnRyZSBsZXMgZGV1eCAgDQoNCi0gdmFsdWUuc3BsaXQoJyAnKVsxXSArICIsIiArICIgIiArIHZhbHVlLnNwbGl0KCcgJylbMF0NCg0KT1UNCg0KLSB2YWx1ZS5tYXRjaCgvKC4qKSwoLiopLykucmV2ZXJzZSgpLmpvaW4oIiAiKQ0KPC9kaXY+DQoNCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQWpvdXRlciB1biB6w6lybyBwb3VyIGF2b2lyIHVuIG5vbWJyZSBkZSBjYXJhY3TDqHJlcyBwcsOpY2lzDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpBam91dGVyIHVuIHrDqXJvIGRldmFudCBsZSBjb250ZW51IHNpIGRvbm5lIHVuZSBjaGFpbmUgZGUgMCDDoCAyIGNhcmFjdMOocmVzICANCg0KLSAiMCJbMCwyLWxlbmd0aCh2YWx1ZSldICsgdmFsdWUNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBBcHBsaXF1ZXIgZGVzIGNvbmRpdGlvbnMNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkZvbmN0aW9uIGlmIC0gbcOqbWUgY2hvc2UgcXVlIGRhbnMgZXhjZWwgIA0KDQotIGlmKHRlc3QsIHNpIHRlc3QgZXN0IHZyYWksIHNpIHRlc3QgZXN0IHZyYWkpDQoNClNpIGxhIGNlbGx1bGUgY29udGllbnQgeCwgw6ljcmlyZSB4LCBzaW5vbiB5DQoNCi0gaWYodmFsdWUuY29udGFpbnMoIngiKSwgIngiLCAieSIpDQogDQotIGlmKHZhbHVlLmNvbnRhaW5zKCIxIiksIHZhbHVlLCBudWxsKQ0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQ29tcGFyZXIgZGV1eCBjb2xvbm5lcw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KSWRlbnRpZmllciBzaSBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBkJ3VuZSBjb2xvbm5lIGVzdCBwYXJlaWwgw6AgdW5lIGF1dHJlICANCg0KLSB2YWx1ZSA9PSBjZWxsc1snYXV0cmUtY29sb25uZSddLnZhbHVlDQoNCkVzdC1jZSBxdWUgbGUgcHJlbWllciBjYXJhY3TDqHJlIGRlIGxhIGNvbG9ubmUgeCBlc3QgbGUgbcOqbWUgcXVlIGxhIGNvbG9ubmUgeSAgDQoNCi0gY2VsbHNbImNvbG9ubmUxIl0udmFsdWVbMF0gPT0gY2VsbHNbImNvbG9ubmUyIl0udmFsdWVbMF0NCg0KQ29tcGFyZXIgbGUgY29udGVudSBkZSBkZXV4IGNvbG9ubmVzIGV0IG1vZGlmaWVyIGxlcyB2YWxldXJzIHNlbG9uIGxlIHLDqXN1bHRhdCBkZSBsYSBjb25kaXRpb24gIA0KDQotIGlmKGNlbGxzWyJjb2xvbm5lMSJdLnZhbHVlID09IGNlbGxzWyJjb2xvbm5lMiJdLnZhbHVlLCAiUGFyZWlsIiwgIlBhcyBwYXJlaWwiKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFbDqXJpZmllciBsZSBmb3JtYXQgZCd1bmUgY29sb25uZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQotIHZhbHVlLnR5cGUoKSAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgRmFpcmUgZGVzIGNhbGN1bHMgc2ltcGxlcyAodmFsZXVycyBudW3DqXJpcXVlcykNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KU29tbWUgZCd1bmUgY29sb25uZSBwbHVzIHVuZSBhdXRyZSAgDQoNCi0gdmFsdWUgKyBjZWxsc1snSm91ciBkdSBtb2lzJ10udmFsdWUNCg0KQXJyb25kaXIgbGUgY29udGVudSAgDQoNCi0gcm91bmQodmFsdWUpDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBSZXByZW5kcmUgZXQgY29uY2F0w6luZXIgbGUgY29udGVudSBkJ3VuZSBhdXRyZSBjb2xvbm5lDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgZW4gZnVzaW9ubmFudCBsZSBjb250ZW51IGRlIGRldXggYXV0cmVzIGV0IGFqb3V0ZXIgZHUgdGV4dGUgIA0KDQotIGNlbGxzWydub20nXS52YWx1ZSArIGNlbGxzWydub20nXS52YWx1ZSArICJCb25qb3VyISINCg0KQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIGF2ZWMgbGVzIHRyb2lzIHByZW1pZXJzIGNhcmFjdMOocmVzIHNldWxlbWVudCAgDQoNCi0gY2VsbHNbJ1N5bXB0b21lJ10udmFsdWVbMCwzXQ0KDQotIFRyYW5zZm9ybWVyIGxlIGNvbnRlbnUgZCd1bmUgY29sb25uZSBlbiBjb25jYXTDqW5hbnQgbGUgY29udGVudSBkJ3VuZSBhdXRyZSAgDQoNCnZhbHVlICsgJyAnICsgY2VsbHNbJ3N0cmVldC10eXBlJ10udmFsdWUNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBSZW1wbGFjZXIgZGVzIGNhcmFjdMOocmVzDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNClJlbXBsYWNlciB0b3V0IGxlIGNvbnRlbnUgZCd1bmUgY29sb25uZSAoaWNpLCB2aWRlciBsYSBjb2xvbm5lKSAgDQoNCi0gdmFsdWUucmVwbGFjZSh2YWx1ZSwgIiIpDQoNClJlbXBsYWNlciB1bmUgbGV0dHJlIHBhciB1bmUgYXV0cmUgIA0KDQotIHZhbHVlLnJlcGxhY2VDaGFycygibyIsICJhIikNCg0KRmFpcmUgcGx1c2lldXJzIHJlbXBsYWNlbWVudHMgZCd1biBjb3VwICANCg0KLSB2YWx1ZS5yZXBsYWNlKCIxIiwgInVuIikucmVwbGFjZSgiMiIsICJkZXV4IikucmVwbGFjZSgiMyIsICJ0cm9pcyIpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgSWRlbnRpZmllciBkZXMgY2VsbHVsZXMgcXVpIGNvbW1lbmNlbnQgcGFyLi4uIChyw6lzdWx0YXQgYm9vbMOpZW4pDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCi0gdmFsdWUuc3RhcnRzV2l0aCgiQmVycmkiKSAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBTdXBwcmltZXIgdW4gY2FyYWN0w6hyZSBkZSBkw6lidXQgb3UgZmluIGRlIHZhbGV1cjoNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KKipTdXBwcmltZSDigJxT4oCdIGR1IGTDqWJ1dCBkZSBsYSBjZWxsdWxlICAqKg0KDQotIHZhbHVlLnJlcGxhY2UoL15TLywiIikgW3JlZ2V4IF4gaW5kaXF1ZSBsZSBkw6lidXQgZCd1bmUgY2VsbHVsZV0NCg0KKipTdXBwcmltZSAiLiIgw6AgbGEgZmluIGRlIGxhIGNlbGx1bGUgICoqDQoNCi0gdmFsdWUucmVwbGFjZSgvXC4kLywiIikgW3JlZ2V4ICQgaW5kaXF1ZSBsYSBmaW4gZCd1bmUgY2VsbHVsZV0NCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBUcmF2YWlsbGVyIGF2ZWMgdW4gZm9ybWF0IGRhdGUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkV4dHJhaXJlIHNldWxlbWVudCB1bmUgcGFydGllIGQndW5lIGRhdGUgIA0KDQotIHZhbHVlLnRvRGF0ZSgpLmRhdGVQYXJ0KCJ5ZWFyIikgIA0KDQotICBkaWZmKG5vdygpLHZhbHVlLCd3ZWVrcycpICANCg0KPC9kaXY+DQoNCg0KKioqDQoNCjwvYnI+DQoNCiMgMTUuIFJlc3NvdXJjZXMNCg0KLSBbU2l0ZSBldCBkb2N1bWVudGF0aW9uIG9mZmljaWVsc10oaHR0cHM6Ly9vcGVucmVmaW5lLm9yZy8pDQoNCi0gSm9obiBMaXR0bGUsIDIwMTgsIFtDbGVhbmluZyBEYXRhIHdpdGggT3BlblJlZmluZV0oaHR0cHM6Ly9saWJqb2huLmdpdGh1Yi5pby9vcGVucmVmaW5lL2luZGV4Lmh0bWwpICANCg0KLSBFdmFuIFdpbGwsIDIwMjEsIFtHZXQgU3RhcnRlZCB3aXRoIE9wZW5SZWZpbmU6IEV4cGxvcmUsIENsZWFuLCBhbmQgVHJhbnNmb3JtIHlvdXIgRGF0YSFdKGh0dHBzOi8vZXZhbndpbGwuZ2l0aHViLmlvL29wZW5yZWZpbmUtYi8pICANCg0KLSBVQ0xBLCAyMDE5LCBbR2V0dGluZyBzdGFydGVkIHdpdGggT3BlblJlZmluZSBEaWdpdGFsIEh1bWFuaXRpZXMgMjAxXShodHRwOi8vbWlyaWFtcG9zbmVyLmNvbS9jbGFzc2VzL2RoMjAxdzE5L3R1dG9yaWFscy1ndWlkZXMvZGF0YS1jbGVhbmluZy1hbmQtbWFuaXB1bGF0aW9uL2dldHRpbmctc3RhcnRlZC13aXRoLW9wZW5yZWZpbmUvKQ0KDQotIFtSZWZpbmVQcm8gS25vd2xlZGdlIEJhc2UgZm9yIE9wZW5SZWZpbmVdKGh0dHBzOi8va2IucmVmaW5lcHJvLmNvbS8pDQoNCi0gU2V0aCB2YW4gSG9vbGFuZCwgUnViZW4gVmVyYm9yZ2gsIGFuZCBNYXggRGUgV2lsZGUsIFtDbGVhbmluZyBEYXRhIHdpdGggT3BlblJlZmluZV0oaHR0cHM6Ly9wcm9ncmFtbWluZ2hpc3Rvcmlhbi5vcmcvZW4vbGVzc29ucy9jbGVhbmluZy1kYXRhLXdpdGgtb3BlbnJlZmluZSkNCg0KLSBbSW50cm9kdWN0aW9uIHRvIE9wZW5SZWZpbmVdKGh0dHBzOi8vZG9hbmEuZ2l0Ym9va3MuaW8vdGVzdC9jb250ZW50LykNCg0KLSBEYXRhIENhcnBlbnRyeSwgW0RhdGEgQ2xlYW5pbmcgd2l0aCBPcGVuUmVmaW5lIGZvciBFY29sb2dpc3RzXShodHRwczovL2RhdGFjYXJwZW50cnkub3JnL09wZW5SZWZpbmUtZWNvbG9neS1sZXNzb24vMDAtZ2V0dGluZy1zdGFydGVkL2luZGV4Lmh0bWwpDQoNCi0gT3dlbiBTdGVwaGVucywgMjAxNCwgW0ludHJvZHVjdGlvbiB0byBPcGVuUmVmaW5lXShodHRwOi8vd3d3Lm1lYW5ib3lmcmllbmQuY29tL292ZXJkdWVfaWRlYXMvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMTEvSW50cm9kdWN0aW9uLXRvLU9wZW5SZWZpbmUtaGFuZG91dC1DQy1CWS5wZGYpDQoNCi0gVmVyYm9yZ2ggZXQgRGUgV2lsZGUsIDIwMTMsIFtVc2luZyBPcGVuUmVmaW5lXShodHRwczovL3d3dy5nYmlmLmVzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE4LzAxL1VzaW5nLU9wZW5SZWZpbmVCb29rLnBkZikNCg0KLSBbTGlicmFyeSBDYXJwZW50cnk6IE9wZW5SZWZpbmVdKGh0dHBzOi8vbGlicmFyeWNhcnBlbnRyeS5vcmcvbGMtb3Blbi1yZWZpbmUvMDEtaW50cm9kdWN0aW9uL2luZGV4Lmh0bWwpDQoNCi0gW0dyYXRlZnVsIERhdGFdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dHl0aGVyZWQvZ3JhdGVmdWxkYXRhL3dpa2kpICANCg0KLSBbR1JFTCBSZWNpcGVzXShodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvUmVjaXBlcykNCg0KLSBbQ2hlYXQgU2hlZXQ6IFJlZ3VsYXIgRXhwcmVzc2lvbnMgJiBHUkVMXShodHRwczovL2NvZGU0bGlidG9yb250by5naXRodWIuaW8vMjAxOC0xMC0xMi1hY2Nlc3MvR29vZ2xlUmVmaW5lQ2hlYXRTaGVldHMucGRmKQ0KDQotIFtFdGMhXShodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvRXh0ZXJuYWwtUmVzb3VyY2VzKQ0KDQoNCjxzdHlsZT4NCi5yaWdodCB7DQogZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQouY2VudGVyIHsNCiBhbGlnbjogY2VudGVyOw0KfQ0KDQoubm90ZSB7DQogIHBhZGRpbmc6IDAuNWVtOw0KICBib3JkZXItc3R5bGU6IHNvbGlkOw0KICBib3JkZXItY29sb3I6IGdyZWVuOw0KICBib3JkZXItd2lkdGg6IHRoaW47DQogIGZvbnQtc2l6ZTogOTAlOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KfQ0KDQouYm94MSB7DQogIHBhZGRpbmc6IDAuNWVtOw0KICBiYWNrZ3JvdW5kOiAjZTBlYmViOw0KICBjb2xvcjogYmxhY2s7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQp9DQoNCi5ib3gyIHsNCiAgcGFkZGluZzogMC41ZW07DQogIGJhY2tncm91bmQ6ICM5MmI5Yjk7DQogIGNvbG9yOiB3aGl0ZTsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCn0NCi5jZW50ZXIgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCi50aXRsZSB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgY29sb3I6ICMwMDMzNjY7DQp9DQoNCi5zdWJ0aXRsZSB7DQogIGNvbG9yOiAjMDAzMzY2Ow0KfQ0KDQpoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBsZWdlbmQgew0KICBjb2xvcjogIzVBN0I5QzsNCn0NCg0KPC9zdHlsZT4=